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)