Как получить доступ к другим входным атрибутам в Validator:: extend?
Как говорится в заголовке вопроса:
Как вы можете получить доступ к другим входным атрибутам при использовании Validator:: extend?
При проверке встроенного класса валидатора Laravel я вижу, что он использует $this->data
для доступа к другим атрибутам; однако вы не можете напрямую использовать $this
в закрытии, которое требуется для проверки Validator:: extend.
Кажется, что ручное расширение класса Validator (через пользовательский класс) является единственным вариантом... Правильно ли? Если это так, мне кажется серьезным ограничением для преобразования валидаторов в пакеты, поскольку каждый пакет расширяет базовый класс Validator, для которого PHP в конечном итоге просто сохранит последнее определенное расширение (и, таким образом, сделает другие пакеты проверки достоверности непригодными...). Или я что-то упускаю?
Спасибо.
ИЗМЕНИТЬ
Я также попытался завершить его в пакете после этого метода Джейсона Льюиса, но я продолжаю получать BadMethodCallException
, заявляя, что метод проверки не найден... Пакет совместим с psr-0, и я уверен, что это не проблема с именами.
Ответы
Ответ 1
После небольшого тестирования вы можете получить доступ к массиву, если используете класс, а не обратный вызов. Поскольку он расширяет класс Validator
.
class TestRulesValidator extends \Illuminate\Validation\Validator
{
public function validateTestRule($attribute, $value, $parameters)
{
var_dump($this->data);
exit();
}
}
В документации проверки используйте:
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', '[email protected]');