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

时间:2017-08-12

对吧,这样我们可以获得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 的字段。

// migrate 代码如下
$this->addColumn('member','slug',$this->string(64)->notNull());

配置模型

首先我们依然要让 SluggableBehavior 注入到Member模型中,增强其功能。

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了

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

Url美化

当然到此刻,通过 http://abc.com/memberr/wang-hao 我们依然得不到,还需要UrlMananger的支持。

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

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后,得到了想要的结果。

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

这个情况在很多博客和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

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

其他两个

还剩下 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等无模式的数据库来说是非常有用的。

  • 共3页:
  • 上一页
  • 2/3
  • 下一页
  • 上一篇:Yii2使用表单上传文件的实例代码 下一篇:PHP实现的简单在线计算器功能示例

    相关文章

    最新文章