正如标题阐明了 Yii 中过滤器的主要目的是什么?我是 Yii 的新手,对过滤器和验证器有点困惑?任何人都可以为我解释一下吗?
3 回答
验证器将验证模型中的属性是否应为:an,integer,date,小于给定大小,...
例子:
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()
来源:模型规则验证
过滤器定义为:
可以在执行操作之前和之后应用过滤器。它可以修改动作要运行的上下文或修饰动作生成的结果。
所以基本上它会在调用控制器方法之前(所以在屏幕上渲染任何东西之前)或在控制器完成之后(所以它可能在数据被验证并添加到数据库之后)执行一些工作。例如,我们可以说:
- 检查用户权限
- 实现 HTTP 缓存
- ...
要将过滤器应用于操作,我们需要重写 CController::filters() 方法。该方法应返回一个过滤器配置数组。例如,
public function filters()
{
return array(
'postOnly + edit, create',
array(
'application.filters.PerformanceFilter - edit, create',
'unit'=>'second',
),
);
}
使用加号和减号运算符,我们可以指定过滤器应该和不应该应用于哪些操作。在上面,postOnly
过滤器将应用于edit
和create
动作,而PerformanceFilter
过滤器将应用于除edit
和之外的所有动作create
。如果过滤器配置中既没有出现加号也没有出现减号,则过滤器将应用于所有操作。
所以如果你想验证一些数据,那么使用验证器,如果你想做的不依赖于模型(即检查用户是否登录,......)那么你应该实现一个过滤器。一般来说,过滤器和验证器之间的区别非常明显。
Validators are used for preventing inserting or updating wrong data in db. Filters could be used to make some preparation before or after validating
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'),
);
}
}
过滤器 主要用于过滤你的 URL。这里还包括 accessControl。这意味着当您设置 URL 以访问任何操作时。然后那些过滤器检查是否允许这些用户执行操作。此外,如果您设置此控制器删除操作只能通过 POST 方法访问,那么您将无法使用 GET 方法进行删除。那些所有类型的访问....由过滤器控制。
另一方面,Validator用于验证您提交的任何输入是否符合您的意愿。就像最小值,最大值,整数一样,它是否是唯一的,这个字段是否需要。此字段是否为电子邮件类型......以及更多类型的输入字段验证......
在 Single Word 中可以说“验证器用于输入验证,过滤器用于输出验证”