Intereting Posts
Альтернативный var_dump для PHP, который позволяет ограничить глубину вложенных массивов Как я могу найти первую и последнюю дату в месяц с помощью PHP? Удаление курсора исчезает {if not isset} Smarty страница карты становится пустой после вставки php-кода Внутренняя ошибка сервера (ошибка HTTP 500) после установки phpmyadmin в определенном домене Как получить доступ к другим входным атрибутам в Validator :: extend? Как «проверить» форму Symfony в шагах – вместо вызова $ form-> isValid () Почему я получаю сообщение об ошибке «Ошибка перенаправления страницы»? Как разделить сессию входа в Joomla с одного сайта Joomla на один веб-сайт ASP.Net MVC Minify / Obfuscate PHP Code PHP – Как изменить статус конфиденциальности видео с YouTube через Youtube API v3? Введите поле идентификатора, сгенерированное с помощью триггера, но не пройденное Как получить первую страницу PDF и преобразовать ее в JPG codeigniter – скрытый ввод с функцией перенаправления

Как получить доступ к другим входным атрибутам в Validator :: extend?

Поскольку заголовок вопроса гласит: Как вы можете получить доступ к другим входным атрибутам при использовании Validator :: extend?

При проверке встроенного класса валидатора Laravel я вижу, что он использует $this->data для доступа к другим атрибутам; однако вы не можете напрямую использовать $this в закрытии, которое требуется Validator :: extend.

Кажется, что ручное расширение класса Validator (через пользовательский класс) является единственным вариантом … Правильно ли я? Если это так, мне кажется серьезным ограничением для преобразования валидаторов в пакеты, поскольку каждый пакет расширяет базовый класс Validator, для которого PHP в конечном итоге просто сохранит последнее определенное расширение (и, таким образом, сделает другие пакеты проверки достоверности непригодными …). Или я чего-то не хватает?

Благодарю.

РЕДАКТИРОВАТЬ

Я также попытался завершить его в пакете, следуя этому методу Джейсоном Льюисом, но я продолжаю получать BadMethodCallException заявляя, что метод проверки не может быть найден … Пакет совместим с psr-0, и я уверен, что это не проблема с именами.

После небольшого тестирования вы можете получить доступ к массиву, если используете класс, а не обратный вызов. Поскольку он расширяет класс 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', 'TestRulesValidator@validateTestRule');