不带匿名函数的Yii2自定义筛选规则

不带匿名函数的Yii2自定义筛选规则,yii2,Yii2,我正在尝试过滤一段输入数据,但不希望使用匿名函数。下面的第一个示例有效,但第二个示例返回列出的错误。我不想让几十行验证代码直接出现在我的规则中,所以我想找到一种方法来打破它(就像我试图实现的第二个示例中那样) 示例1(有效,但不是我想做的) 示例2(不起作用,但这是我想做的) 上面示例2返回的错误 call_user_func() expects parameter 1 to be a valid callback, function 'validateRoles' not found

我正在尝试过滤一段输入数据,但不希望使用匿名函数。下面的第一个示例有效,但第二个示例返回列出的错误。我不想让几十行验证代码直接出现在我的规则中,所以我想找到一种方法来打破它(就像我试图实现的第二个示例中那样)

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

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

上面示例2返回的错误

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

为什么上面的第二个示例不起作用?或者更重要的是,我需要做哪些更改才能使第二个示例起作用?

您可能需要使用如下结构:

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

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

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

阅读更多内容:

正是我所需要的,谢谢!感兴趣的人的英文链接这不提供问题的答案。若要评论或要求作者澄清,请在他们的帖子下方留下评论。你的意思是什么?这与标记为正确的答案相同,否?或者你的意思是它将发布完整的功能体?你认为在你的答案中添加“也许”一词。如果你不确定你的答案是否正确,那么将其作为评论发布。
'filter' => array( $this, 'checkRoles' )
public function rules()
{
    return [
        ['roles', 'filter', 'filter' => [$this, 'checkRoles']],
    ];
}