如问题标题所述:
使用Validator::extend时如何访问其他输入属性?
检查Laravel的内置Validator类后,我可以看到它使用$this->data
访问其他属性。但是您不能在Validator::extend要求的闭包中直接使用$this
。
似乎(通过自定义类)手动扩展Validator类是唯一的选择...我正确吗?如果是这样,对我来说,这似乎是将验证器转换为程序包的一个严重限制,因为每个程序包都会扩展基本的Validator类,PHP最终将为其保留最后定义的扩展(从而使其他验证程序包不可用...)。还是我错过了什么?
谢谢。
编辑
我还尝试将其包装在Jason Lewis的this method之后的程序包中,但我不断收到BadMethodCallException
指出找不到验证方法...该程序包符合psr-0,而且我敢肯定它不是一个命名空间问题。
最佳答案
经过一些测试,如果您使用类而不是回调,则可以访问数组。随着它的扩展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');
关于php - 如何访问Validator::extend中的其他输入属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22491088/