3

正如标题阐明了 Yii 中过滤器的主要目的是什么?我是 Yii 的新手,对过滤器和验证器有点困惑?任何人都可以为我解释一下吗?

4

3 回答 3

7

验证器将验证模型中的属性是否应为: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过滤器将应用于editcreate动作,而PerformanceFilter过滤器将应用于除edit和之外的所有动作create。如果过滤器配置中既没有出现加号也没有出现减号,则过滤器将应用于所有操作。

来源:Yii API 关于 CFilterYii 指南

所以如果你想验证一些数据,那么使用验证器,如果你想做的不依赖于模型(即检查用户是否登录,......)那么你应该实现一个过滤器。一般来说,过滤器和验证器之间的区别非常明显。

于 2013-01-30T08:39:43.833 回答
3

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'),
        );
    }
}
于 2013-01-30T08:53:48.597 回答
1

过滤器 主要用于过滤你的 URL。这里还包括 accessControl。这意味着当您设置 URL 以访问任何操作时。然后那些过滤器检查是否允许这些用户执行操作。此外,如果您设置此控制器删除操作只能通过 POST 方法访问,那么您将无法使用 GET 方法进行删除。那些所有类型的访问....由过滤器控制。

另一方面,Validator用于验证您提交的任何输入是否符合您的意愿。就像最小值,最大值,整数一样,它是否是唯一的,这个字段是否需要。此字段是否为电子邮件类型......以及更多类型的输入字段验证......

在 Single Word 中可以说“验证器用于输入验证,过滤器用于输出验证

于 2013-01-30T09:06:06.443 回答