加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

yii2学习教程之5种内置行为类详解

发布时间:2021-02-27 06:46:40 所属栏目:编程 来源:网络整理
导读:媒介 众所周知进修全部常识都必要循规蹈矩,举动也是一样,在我们学会很牛逼的新建举动,然后轻松注入到组件类之前,先看看yii2框架为我们筹备的5个内置的举动类,大概你刚要用到~话不多说了,来一路看看具体的先容: 本节的目标是让列位小搭档在行使进程中
副问题[/!--empirenews.page--]

媒介

众所周知进修全部常识都必要循规蹈矩,举动也是一样,在我们学会很牛逼的新建举动,然后轻松注入到组件类之前,先看看yii2框架为我们筹备的5个内置的举动类,大概你刚要用到~话不多说了,来一路看看具体的先容:

本节的目标是让列位小搭档在行使进程中对举动有一个整体上的感受。

先亮表态

  • TimestampBehavior
  • SluggableBehavior
  • BlameableBehavior
  • AttributeTypecastBehavior
  • AttributeBehavior

网上许多文章只是讲授了个中的 TimestampBehavior ,我们把这些都讲下。

TimestampBehavior

自动更新模子对应数据表中的建设时刻(created_at)与更新时刻(updated_at)字段。

为了利便进修,我成立了一个member表,布局如下

yii2进修教程之5种内置举动类详解

对付 created_at 和 updated_at 字段的更新,我想让 TimestampBehavior 帮我去做,看看怎样举办?

第一步

配置模子,在member表对应的模子Member中,我必要先举办如下配置

use Yii;
use yiibehaviorsTimestampBehavior;
class Member extends yiidbActiveRecord {
...
public function behaviors(){
return [
[
'class'=>TimestampBehavior::className(),'attributes'=>[
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at','updated_at'],ActiveRecord::EVENT_BEFORE_UPDATE => ['created_at'],]
]
];
}
...
}

从代码上看,启动了两个变乱,要留意的事这个变乱在rules验证之后,假如rules没有通过,则无效。

第二步

接下来我们在action中行使它,为了让例子更好玩一点,我用了节制台模式。

use yiiconsoleController;
use appmodelsMember;

class MemberController extends Controller{

public function actionIndex(){
$model = new Member();
$model->username = 'abei';
if($model->save() == false){
var_dump($model->getErrors());
}

var_dump($model->toArray());
}
}

下面看看var_dump的 $model中created_at 和 updated_at 是否稀有据?

yii2进修教程之5种内置举动类详解

对付功效我想你是喜好的,通过增进了对举动的关联进而为Member类增进了时刻的添补成果,不光单云云,TimestampBehavior 还提供了一个风趣的touch函数,行使它能将当前时刻戳赋值给指定属性并生涯到数据库。

也许这个要领的行使更接近你脑海中的举动。

touch('do_time');

Member自己并没有touch函数,因被 TimestampBehavior 注入而拥有了touch要领,对较量本身写一个要领,举动可以注入到许多个类中,复用率很是高。

AttributeBehavior

接下来我们来讲授yii2的第二个举动类,假如你仔细调查,应该能发明上面好几个举动类都担任于此类,那么该类的行使要领是什么那?它支持在AR变乱触发时自动修改它的属性。

我们假设一种场景,照旧上面的谁人member数据表,我们为其增进一个token字段,该字段的值被数据天生时初始化,值为username的md5值,这个工作在全部member初始化时辰城市产生,此刻用AttributeBehavior来搞定它。

第一步配置Member模子

照旧在它的 behaviors 要领中,我们如下配置

use Yii;
use yiibehaviorsAttributeBehavior;
use yiidbActiveRecord;

class Member extends yiidbActiveRecord {

public function behaviors(){
return [
[
'class' => AttributeBehavior::className(),'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'token',],'value' => function ($event) {
return md5($this->username);
},];
}
}

我们依然行使上面例子第二步的action代码,不做任何窜改,看看举动对所注入类的成果加强。

yii2进修教程之5种内置举动类详解

SluggableBehavior

下面来说说 SluggableBehavior 这个举动类,网上很少有人讲过它,我们不落下。

行使 SluggableBehavior 可以让我们的URL美化越发语义化。

照旧上面的例子,假如我们想通过url得到某一个会员的信息,一样平常是这样写 http://abc.com/index.php?r=me...

对吧,这样我们可以得到id=3的会员信息。 可是这样的url我们和搜刮引擎都不喜好,以是此刻我们常用 http://abc.com/member/view/3 这种名目,这种名目很简朴,通过url美化可以轻松实现。

可是,这也不是我们最喜好的,都在讲url的语义化,我想下面的url才是我们想要的

  • http://abc.com/member/wang-hao
  • http://abc.com/member/beijing...

我数据表的username中别离对应的是 wang hao 和 beijing xiao si 的记录,这样的url不单雅观,还具有很不错的安详性。

下面我来讲讲它的实现步调,起首我必要在member表中增进一个叫做 slug 的字段。

addColumn('member','slug',$this->string(64)->notNull());

设置模子

起首我们依然要让 SluggableBehavior 注入到Member模子中,加强其成果。

use Yii;
use yiibehaviorsSluggableBehavior;
use yiidbActiveRecord;

class Member extends yiidbActiveRecord
{
...

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读