正如标题澄清了Yii过滤器的主要用途是什么?我是Yii的新手,对过滤器和验证器有点迷惑吗?任何人都能为我解释一下吗?
验证器将验证模型中的属性是否应该是:a,整数,日期,小于给定大小,......
例:
public function rules()
{
return array(
//username and password are required
array('username, password', 'required'),
//myInt is a number between 0 and 255
array('myInt', 'numerical', 'min'=>0, 'max'=> 255),
);
}
Run Code Online (Sandbox Code Playgroud)
验证规则将在调用$model->validate()或测试时进行测试$model->save().如果其中一个验证器未通过,则会向用户抛出错误.
您可以通过调用了解错误 $model->getErrors()
来源:模型规则验证
过滤器定义是:
可以在执行操作之前和之后应用过滤器.它可以修改操作要运行的上下文,或者修饰操作生成的结果.
所以基本上它会在调用控制器方法之前执行一些工作(所以在屏幕上呈现任何内容之前)或控制器完成之后(因此可能是在数据经过验证并添加到数据库中之后).例如,我们可以说:
要将过滤器应用于操作,我们需要覆盖CController :: filters()方法.该方法应返回一组过滤器配置.例如,
public function filters()
{
return array(
'postOnly + edit, create',
array(
'application.filters.PerformanceFilter - edit, create',
'unit'=>'second',
),
);
}
Run Code Online (Sandbox Code Playgroud)
使用加号和减号运算符,我们可以指定应该和不应该应用过滤器的操作.在上面,postOnly过滤器将应用于edit和create动作,而PerformanceFilter过滤器将应用于所有动作EXCEPT edit和create.如果过滤器配置中既没有加号也没有减号,则过滤器将应用于所有操作.
因此,如果您想验证某些数据,那么使用验证器,如果您想要做的不依赖于模型(即检查用户是否已登录,...),那么您应该实现过滤器.通常,过滤器和验证器之间的区别非常明显.