由于标题阐明了Yii过滤器的主要用途是什么?我是Yii的新手,对过滤器和验证器有点迷惑吗?任何人都能为我解释一下吗?
答案 0 :(得分:7)
验证器将验证模型中的属性是否应该是: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),
);
}
调用$model->validate()
或$model->save()
时,将测试验证规则。如果其中一个验证器未通过,则会向用户抛出错误。
您可以通过调用$model->getErrors()
过滤器定义是:
可以在执行操作之前和之后应用过滤器。它可以 修改操作要运行的上下文或装饰结果 行动产生的。
所以基本上它会在调用控制器方法之前执行一些工作(所以在屏幕上呈现任何内容之前)或控制器完成之后(因此可能是在数据经过验证并添加到数据库之后)。 例如,我们可以说:
要对操作应用过滤器,我们需要覆盖CController :: filters()方法。该方法应返回一组过滤器配置。例如,
public function filters()
{
return array(
'postOnly + edit, create',
array(
'application.filters.PerformanceFilter - edit, create',
'unit'=>'second',
),
);
}
使用加号和减号运算符,我们可以指定应该和不应该应用过滤器的操作。在上文中,postOnly
过滤器将应用于edit
和create
操作,而PerformanceFilter
过滤器将应用于除edit
和{create
之外的所有操作{1}}。如果过滤器配置中既没有加号也没有减号,则过滤器将应用于所有操作。
来源:Yii API about CFilter和Yii Guide
因此,如果您想验证某些数据,那么使用验证器,如果您想要做的不依赖于模型(即检查用户是否已登录,...),那么您应该实现过滤器。 一般来说,过滤器和验证器之间的区别非常明显。
答案 1 :(得分:3)
验证器用于防止在db中插入或更新错误数据。过滤器可用于在验证之前或之后进行一些准备
class LoginForm extends CFormModel
{
public $mail;
public $password;
public $rememberMe;
public function rules()
{
return array(
array('mail, password', 'filter'=>'trim'),
array('mail', 'filter'=>'mb_strtolower'),
array('mail, password', 'required'),
array('mail', 'email'),
array('rememberMe', 'boolean'),
array('password', 'authenticate'),
);
}
}
答案 2 :(得分:1)
过滤器主要用于过滤您的网址。这里还包括accessControl。这意味着当您设置URL以访问任何操作时。然后,这些过滤器检查了那些用户是否允许操作。此外,如果您设置此控制器删除操作只能通过POST方法访问然后您将无法使用GET方法删除。那些所有类型的访问....由FILTERS控制。
另一方面,验证器用于根据您的意愿验证您提交的任何输入。如同最小值,最大值,整数与否,它是否是唯一的,是否需要此字段。这个字段是否是电子邮件类型......还有更多类型的INPUT FIELD验证.....
在单字中,可以说“验证器用于输入验证,过滤器用于输出验证”