2018年7月

behaviors英文原意为行为,从字面来看是应该关于控制器内部行为的相关规则设定。
贴上源代码如下:
public function behaviors()

{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['login', 'error'],
                    'allow' => true,
                ],
                [
                    'actions' => ['logout', 'index'],
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}

behaviors方法返回 配置access(权限)、verbs(动作/行为/方法)的数组,其中access使用的类是AccessControl(权限控制器),verbs使用的类是VerbFilter(动作/行为过滤器),两者都在yiifilters命名空间下,都属于过滤器。
其中,access通过rules配置定义了规则,actions指明了方法,allow是否允许(true:允许;false:禁止),roles限定角色(认证用户、未认证用户):联合起来意思即为是否允许(alllow)用户(roles)执行方法(actions)。
而verbs则是对方法请求类型(get、post……)的限定,如上logout方法采用post方式提交请求。
过滤器是 控制器 动作 执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。

过滤器可包含 预过滤(过滤逻辑在动作之前) 或 后过滤(过滤逻辑在动作之后),也可同时包含两者。

yiifiltersVerbFilter

VerbFilter检查请求动作的HTTP请求方式是否允许执行,如果不允许,会抛出HTTP 405异常。 如下示例,VerbFilter指定CRUD动作所允许的请求方式。

use yiifiltersVerbFilter;

public function behaviors()
{

return [
    'verbs' => [
        'class' => VerbFilter::className(),
        'actions' => [
            'index'  => ['get'],
            'view'   => ['get'],
            'create' => ['get', 'post'],
            'update' => ['get', 'put', 'post'],
            'delete' => ['post', 'delete'],
        ],
    ],
];

}