没有匿名函数的Yii2自定义过滤规则

时间:2015-04-07 14:05:56

标签: yii2

我试图过滤一段输入数据但是想在没有匿名函数的情况下这样做。下面的第一个示例有效,但第二个示例返回列出的错误。我不希望这几行验证码直接放在我的规则中,所以我想要一种方法来解决它(就像我试图实现的第二个例子一样。

示例1(有效,但不是我想做的)

public function rules()
{
    return [
        ['roles', 'filter', 'filter' => function ($value) {
            // Do some stuff to remove invalid roles
            return $value;
        }];
}

示例2(不起作用,但我想做的事)

public function rules()
{
    return [
        ['roles', 'filter', 'filter' => 'checkRoles'],
    ];
}

public function checkRoles($value)
{
    // Do some stuff to remove invalid roles
    return $value;
}

上面的示例2返回错误

call_user_func() expects parameter 1 to be a valid callback,
    function 'validateRoles' not found or invalid function name

为什么上面的第二个例子不起作用?或者更确切地说,更重要的是,我需要改变什么来使第二个例子起作用?

2 个答案:

答案 0 :(得分:0)

您可能必须使用这样的结构:

'filter' => array( $this, 'checkRoles' )

答案 1 :(得分:0)

您应该使用有效的回调,例如:

public function rules()
{
    return [
        ['roles', 'filter', 'filter' => [$this, 'checkRoles']],
    ];
}

了解详情:http://php.net/manual/language.types.callable.php