正如问题标题所述: 使用Validator :: extend时如何访问其他输入属性?
在检查Laravel的内置Validator类后,我可以看到它使用$this->data
来访问其他属性;但是你不能在Validator :: extend所需的闭包中直接使用$this
。
似乎手动扩展Validator类(通过自定义类)是唯一的选择......我是否正确?如果是这样,在我看来这似乎是将验证器转换为包的严重限制,因为每个包都会扩展基本的Validator类,PHP最终会保留最后定义的扩展(从而使其他验证器包无法使用......)。或者我错过了什么?
感谢。
修改
我还尝试将其包装在Jason Lewis的this method之后的包中,但我不断得到BadMethodCallException
声明无法找到验证方法...包是psr-0合规,我很确定它不是命名空间问题。
答案 0 :(得分:18)
经过一些测试后,如果您使用的是类而不是回调,则可以访问该数组。因为它扩展了Validator
类。
class TestRulesValidator extends \Illuminate\Validation\Validator
{
public function validateTestRule($attribute, $value, $parameters)
{
var_dump($this->data);
exit();
}
}
从validation documentation开始,使用:
Validator::resolver(function($translator, $data, $rules, $messages) {
return new TestRulesValidator($translator, $data, $rules, $messages);
});
您的规则名称为test_rule
。删除validate
关键字并转换为下划线大小写。
刚刚在全新安装上测试过它,它可以正常工作。
修改 - 您还可以使用普通extend
方法并传递额外参数。
class TestRulesValidator
{
public function validateTestRule($attribute, $value, $params, $validator) {
var_dump($validator->getData());
}
}
Validator::extend('test_rule', 'TestRulesValidator@validateTestRule');