YII过滤器的主要用途是什么?

时间:2013-01-30 08:25:57

标签: yii yii-filters

由于标题阐明了Yii过滤器的主要用途是什么?我是Yii的新手,对过滤器和验证器有点迷惑吗?任何人都能为我解释一下吗?

3 个答案:

答案 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()

来了解引发的错误

来源:Model Rules Validation

过滤器定义是:

  

可以在执行操作之前和之后应用过滤器。它可以   修改操作要运行的上下文或装饰结果   行动产生的。

所以基本上它会在调用控制器方法之前执行一些工作(所以在屏幕上呈现任何内容之前)或控制器完成之后(因此可能是在数据经过验证并添加到数据库之后)。 例如,我们可以说:

  • 检查用户授权
  • 实现HTTP缓存
  • ...

要对操作应用过滤器,我们需要覆盖CController :: filters()方法。该方法应返回一组过滤器配置。例如,

public function filters()
{
    return array(
       'postOnly + edit, create',
        array(
            'application.filters.PerformanceFilter - edit, create',
            'unit'=>'second',
        ),
    );
}

使用加号和减号运算符,我们可以指定应该和不应该应用过滤器的操作。在上文中,postOnly过滤器将应用于editcreate操作,而PerformanceFilter过滤器将应用于除edit和{create之外的所有操作{1}}。如果过滤器配置中既没有加号也没有减号,则过滤器将应用于所有操作。

来源:Yii API about CFilterYii 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验证.....

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