namespace app\models; use Yii; use yii\behaviors\SluggableBehavior; use yii\db\ActiveRecord; class Member extends \yii\db\ActiveRecord { ... public function behaviors(){ return [ [ 'class' => SluggableBehavior::className(), 'attribute' => 'username', // 'slugAttribute' => 'slug', ], ]; } }
要注意的是,yii2框架的slugAttribute默认为slug,而我们刚刚在数据表中增加的字段也叫slug,因此不需要再设置slugAttribute了。
接下来我们生成一个username=wang hao的记录,你会发现该记录的slug自动被填充为wang-hao了
Url美化
当然到此刻,通过 我们依然得不到,还需要UrlMananger的支持。
Action的实现
接下来我们的MemberController控制器里
namespace app\controllers; use yii\web\Controller; use app\models\Member; class MemberController extends Controller{ public function actionSlug($slug) { $model = Member::find()->where(['slug'=>$slug])->one(); \yii\helpers\VarDumper::dump($model->toArray(),10,true);die(); } }
接下来你访问/member/wang-hao后,得到了想要的结果。
这个情况在很多博客和cms站点经常用到,比如你可以访问下月光博客看看它的url,通过 SluggableBehavior 行为帮我们省去了自己填写slug的麻烦,自动添加。
当然这个行为类有一个缺点就是不支持中文,如果你的字段是中文,它分析不出来,没关系,下节我们会讲解如何让他支持中文
关于 SluggableBehavior 还有几个参数有必要交代一下
public function behaviors() { return [ [ 'class' => SluggableBehavior::className(), 'attribute' => 'username', 'immutable' => true, 'ensureUnique'=>true, ], ]; }
immutable 此参数默认为假,当设置为真时,一旦一个记录被生成,以后就算更更新了 'attribute' => 'username' 字段,slug值也不会改变。
ensureUnique 此参数默认为假,当设置为真时,可以有效避免slug的重复,如果两个username都叫做 wang hao,则生成的slug会是wang-hao 和 wang-hao-2
其他两个
还剩下 BlameableBehavior 和 AttributeTypecastBehavior 两个行为,其实说到这里你应该能感觉到,yii2的内置行为主要是对AR模型属性的增强,毕竟这是我们最常用的。
通过上面三个行为的学习,我想你可以很轻松的搞定这两个,代码方面我不再讲解,说说这两个行为的作用。
BlameableBehavior
该行为主要是为一个ar对应数据表自动填充当前登录会员ID
public function behaviors() { return [ [ 'class' => BlameableBehavior::className(), 'createdByAttribute' => 'author_id', 'updatedByAttribute' => 'updater_id', ], ]; }
如果是后台等模块,你可以设置value字段来完成对登录ID的获取。
AttributeTypecastBehavior
AttributeTypecastBehavior 行为是yii2在v2.0.10版本时增加的,主要提供了一个自动转换模型属性格式的行为,这针对于类似MongoDB或Redis等无模式的数据库来说是非常有用的。
目前该行为提供的类型如下
const TYPE_INTEGER = 'integer'; const TYPE_FLOAT = 'float'; const TYPE_BOOLEAN = 'boolean'; const TYPE_STRING = 'string';
当然它也提供了一个 手动方法 typecastAttributes,你可直接调用进行属性格式的转换。
最后
以上就是yii2提供的5个内置的行为类,通过这些行为(主要是前3个)可以帮我们减少很多代码的编写。
当然后续的章节你将慢慢体会到行为的更多给力之处,一起期待。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章: