Правила проверки Laravel, совместно используемые между запросом формы и валидатором в команде

#laravel #laravel-validation

#laravel #laravel-проверка

Вопрос:

У меня есть набор правил проверки в FormRequest, Laravel 6.X, например, так:

     {
        return [
            'rule1' => 'required|numeric',
            'rule2' => 'required|numeric',
             ...,
            'ruleN.*.rule1' => ''required|string|max:50'
        ];
    }
  

Это отлично работает для каждого HTTP-запроса AJAX к конечной точке, для которой он был создан. Однако мне также нужно запустить тот же процесс (на этот раз проверить не запрос, а массив входных данных) с помощью команды CLI, где этот FormRequest нельзя использовать, поскольку это не будет запрос.

Пытаясь ввести FormRequest в команду типа:

 public function handle(CustomFormRequest $validator)
{
  ...
}
  

выполнение команды всегда завершается неудачей (конечно) при каждом запуске, поскольку тип ввода не является запросом.

Немного погуглив, я пришел к решению в форме (правила будут такими же, как ofc):

 $validator = Validator::make([
    'rule1' => $firstName,
    'rule2' => $lastName,
], [
    'rule1' => ['required'],
    'rule2' => ['required'],

]);
  

Однако я хотел бы поделиться набором правил в общем месте (например, в файле) и что как FormRequest, так И класс Validator могут использовать одни и те же правила, без записи в обоих местах (запрос формы и команда), чтобы сохранить их неизменными при любых изменениях.

Есть ли способ записать массив «правил» в общем месте (например, в файле) и импортировать их в оба места? Возможно, базовый класс будет работать, но это выглядит неправильно, поскольку они не разделяют ничего, кроме этого. Я подумал об одной черте, но я сомневаюсь, что это может быть лучшим решением.

Комментарии:

1. rules() И attributes() методы FormRequest являются общедоступными, поэтому вы можете создать новый экземпляр вашего FormRequest и получить из него правила / атрибуты, что-то вроде этого: $validator = Validator::make($data, (new YourFormRequest())->rules());

2. мм, я не думал об этом. Я попробую. Спасибо! 🙂