Несколько правил проверки с условием «ИЛИ» - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть класс MyRequest , который содержит правила проверки параметров запроса.В поле «file» может быть null или string или file .Как я могу построить для него условия правила?

class MyRequest extends FormRequest
// ...
   public function rules()
        {
            return [
                 // 'file' => 'image|max:20480', // need to combine this
                 // 'file' => 'nullable|string', // and this through OR
                 // 'file' => 'nullable|string|image|max:20480' // <- don't working (string not pass validation)
            ];
         }
}

Я также создал собственное правило:

class AppServiceProvider extends ServiceProvider
{

    public function boot()
    {
        Validator::extend('myCustomRule', function ($attribute, $value, $parameters, $validator) {
            return !Validator::make([$attribute => $value], ['nullable|image|max:20480'])->fails()
                || !Validator::make([$attribute => $value], ['string'])->fails();
        });
    }

, и оно не сработало.Идея состоит в том, что я хочу использовать правила Laravel, а не писать собственную реализацию правил для проверки длины строки и т. Д.

1 Ответ

0 голосов
/ 20 декабря 2018

Я нашел решение.Работает (Laravel v5.4):

class AppServiceProvider extends ServiceProvider
{
// ...
    public function boot()
    {
    Validator::extend('myCustomRule', function ($attribute, $value, $parameters, $validator) {

            $validator1 = Validator::make([$attribute => $value], [
                'image' => 'nullable|string|max:255'
            ]);

            $validator2 = Validator::make([$attribute => $value], [
                'image' => 'image|max:20480'
            ]);

            return !$validator1->fails() || !$validator2->fails();
        });
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...