Я хочу расширить класс проверки формы для поддержки элементов формы массива, как описано здесь для L3 в L4.
Во-первых, я изменил псевдоним Validator с этим в своем app/config/app.php
:
'Validator' => 'app\lib\Support\Facades\Validator',
Затем я сохранил эти коды как app / lib / Support / Facades / Validator.php
<?php namespace app\lib\Support\Facades; class Validator extends \Illuminate\Support\Facades\Validator { public function __call($method, $parameters) { if (substr($method, -6) === '_array') { $method = substr($method, 0, -6); $values = $parameters[1]; $success = true; foreach ($values as $value) { $parameters[1] = $value; $rule = snake_case(substr($method, 8)); if (isset($this->extensions[$rule])) { $success &= $this->callExtension($rule, $parameters); } throw new \BadMethodCallException("Method [$method] does not exist."); } return $success; } else { return parent::__call($method, $parameters); } } protected function getMessage($attribute, $rule) { if (substr($rule, -6) === '_array') { $rule = substr($rule, 0, -6); } return parent::getMessage($attribute, $rule); } }
Затем я убедился, что у моего composer.json
есть папка, включенная для автозагрузки:
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php", "app/lib", "app/lib/Support", "app/lib/Support/Facades" ] },
Затем я запустил php composer.phar dump-autoload
для создания классов автозагрузки.
Дело в том, что, похоже, это не работает. Я даже попытался добавить специальный метод проверки в файл, который я сгенерировал, примерно так:
protected function validateTest($attribute, $value) { return $value=='test'; }
В нем говорится: Method [validateTest] does not exist.
, Я изменил protected
public
, тем не менее.
get_class(Validator::getFacadeRoot())
дает мне \Illuminate\Validation\Factory
, но когда я расширяю класс, который я написал ему, я получаю эту ошибку: Non-static method Illuminate\Validation\Factory::make() should not be called statically
.
Примечание . Да, я не расширил правила, как L4, потому что я не хочу добавлять новое правило, но я хочу изменить __call()
метода __call()
и getMessage()
.
Что мне не хватает, как я могу это сделать?
Кажется, я не искал достаточно. Как было предложено в комментариях, я просто добавил коды, разделяемые в этом ответе на мое app/routes.php
без создания нового файла или изменения псевдонима, и он работал безупречно!
Это правило проверки, которое я дал с помощью решения:
$rules = array( 'items' => 'required|min:1|integerOrArray' );