如何访问Validator :: extend中的其他输入属性?

Pro*_*tas 15 php validation package laravel

正如问题标题所述:当使用Validator :: extend时,如何访问其他输入属性?

在检查Laravel的内置Validator类时,我可以看到它用于$this->data访问其他属性; 但是你不能直接$this在Validator :: extend所需的闭包中使用.

似乎手动扩展Validator类(通过自定义类)是唯一的选择......我是否正确?如果是这样,在我看来这似乎是将验证器转换为包的严重限制,因为每个包都会扩展基本的Validator类,PHP最终将保留最后定义的扩展(从而使其他验证器包无法使用......).或者我错过了什么?

谢谢.

编辑

我也尝试用Jason Lewis的方法将它包装在一个包中,但我一直在BadMethodCallException说明无法找到验证方法......该软件包符合psr-0并且我很确定它不是命名空间问题.

Sam*_*amV 18

经过一些测试后,如果使用类而不是回调,则可以访问该数组.因为它扩展了Validator课程.

class TestRulesValidator extends \Illuminate\Validation\Validator
{

    public function validateTestRule($attribute, $value, $parameters)
    {
        var_dump($this->data);

        exit();
    }

}
Run Code Online (Sandbox Code Playgroud)

验证文档中,使用:

Validator::resolver(function($translator, $data, $rules, $messages) {
    return new TestRulesValidator($translator, $data, $rules, $messages);
});
Run Code Online (Sandbox Code Playgroud)

你的规则名称是test_rule.删除validate关键字并转换为下划线大小写.

刚刚在全新安装上进行了测试,它确实有效.

编辑 - 您还可以使用常规extend方法并传递额外参数.

class TestRulesValidator
{

    public function validateTestRule($attribute, $value, $params, $validator) {
        var_dump($validator->getData());
    }

}

Validator::extend('test_rule', 'TestRulesValidator@validateTestRule');
Run Code Online (Sandbox Code Playgroud)