前言
众所周知学习所有知识都需要循序渐进,行为也是一样,在我们学会很牛逼的新建行为,然后轻松注入到组件类之前,先看看yii2框架为我们准备的5个内置的行为类,也许你刚要用到~话不多说了,来一起看看详细的介绍:
本节的目的是让各位小伙伴在使用过程中对行为有一个整体上的感觉。
先亮亮相
网上很多文章只是讲解了其中的 TimestampBehavior ,我们把这些都讲下。
TimestampBehavior
自动更新模型对应数据表中的创建时间(created_at)与更新时间(updated_at)字段。
为了方便学习,我建立了一个member表,结构如下

对于 created_at 和 updated_at 字段的更新,我想让 TimestampBehavior 帮我去做,看看如何进行?
第一步
设置模型,在member表对应的模型Member中,我需要先进行如下设置
# app\models\Member
namespace app\models;
use Yii;
use yii\behaviors\TimestampBehavior;
class Member extends \yii\db\ActiveRecord {
...
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中使用它,为了让例子更好玩一点,我用了控制台模式。
namespace app\commands;
use yii\console\Controller;
use app\models\Member;
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 是否有数据?

对于结果我想你是喜欢的,通过增加了对行为的关联进而为Member类增加了时间的填充功能,不单单如此,TimestampBehavior 还提供了一个有趣的touch函数,使用它能将当前时间戳赋值给指定属性并保存到数据库。
可能这个方法的使用更靠近你脑海中的行为。
$member->touch('do_time');
Member本身并没有touch函数,因被 TimestampBehavior 注入而拥有了touch方法,相比较自己写一个方法,行为可以注入到很多个类中,复用率非常高。
AttributeBehavior
接下来我们来讲解yii2的第二个行为类,如果你细心观察,应该能发现上面好几个行为类都继承于此类,那么该类的使用方法是什么那?它支持在AR事件触发时自动修改它的属性。
我们假设一种场景,还是上面的那个member数据表,我们为其增加一个token字段,该字段的值被数据生成时初始化,值为username的md5值,这个事情在所有member初始化时候都会发生,现在用AttributeBehavior来搞定它。
第一步设置Member模型
还是在它的 behaviors 方法中,我们如下设置
// app\models\Member.php
namespace app\models;
use Yii;
use yii\behaviors\AttributeBehavior;
use yii\db\ActiveRecord;
class Member extends \yii\db\ActiveRecord {
public function behaviors(){
return [
[
'class' => AttributeBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'token',
],
'value' => function ($event) {
return md5($this->username);
},
],
];
}
}
我们依然使用上面例子第二步的action代码,不做任何改动,看看行为对所注入类的功能增强。

SluggableBehavior
下面来说说 SluggableBehavior 这个行为类,网上很少有人讲过它,我们不落下。
使用 SluggableBehavior 可以让我们的URL美化更加语义化。
还是上面的例子,如果我们想通过url获得某一个会员的信息,一般是这样写 http://abc.com/index.php?r=me...
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)这篇文章主要介绍了phpstorm 正则匹配删除空行、注释行,需要的朋友可以参考下
Thinkphp5行为使用方法汇总这篇文章主要介绍了Thinkphp5行为使用方法汇总,需要的朋友可以参考下
Yii2中的场景(scenario)和验证规则(rule)详解Yii2的rule用于对模型属性进行验证,scenario用户定义不同场景下需要验证的模型,下面这篇文章主要给大家介绍了关于
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势本篇文章主要介绍了浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势,具有一定的参考价值,感兴趣的小伙伴们可以
Yii2中组件的注册与创建方法这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
Yii2使用驼峰命名的形式访问控制器的示例代码这篇文章主要介绍了Yii2使用驼峰命名的形式访问控制器的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参