如问题标题所述:
使用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/

10-12 02:10