Laravel 5 Форма запроса, требует ввода при создании, но необязательно при редактировании - PullRequest
0 голосов
/ 23 июня 2018

Я использую laravel 5.6 resources controllers и form request, проблема в том, что у меня есть некоторые входные данные, которые required при создании, но при редактировании являются дополнительными, такими как ввод файлов. Итак, у меня есть этот запрос формы

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ProgramRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
            'name.*'        => 'required',
            'description.*' => 'required',
            'logo'          => 'required|image|max:3000',
            'logo_alt'      => 'required|image|max:3000'
        ];
    }
}

поля logo и logo_alt должны быть отправлены при создании программы, но при редактировании ее отправка logo необязательна.

есть ли способ проверить оба случая с одним и тем же form request или мне нужно создать другой form request для редактирования и создания?

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Вместо:

 return [
            //
            'name.*'        => 'required',
            'description.*' => 'required',
            'logo'          => 'required|image|max:3000',
            'logo_alt'      => 'required|image|max:3000'
        ];

вы можете использовать:

$rules =  [
    'name.*'        => 'required',
    'description.*' => 'required',
    'logo'          => ['image', 'max:3000'],
    'logo_alt'      => ['image', 'max:3000'],
];

if ($this->isMethod('POST')
{
   $rules['logo'][] = 'required';
   $rules['logo_alt'][] = 'required';
}

return $rules;

Так что в основном у вас есть правила для обновления, но в дополнение к методу POST вы делаете логотип и logo_alt обязательными.Вы также можете использовать конвейерный синтаксис |, но для правил удобнее использовать синтаксис массива, чтобы позже можно было делать такие вещи при необходимости.

0 голосов
/ 23 июня 2018

Вы можете использовать $this->method(), чтобы проверить, какой метод запроса был использован, и показать разные правила для каждого случая:

public function rules()
    {
        switch($this->method())
        {
            case 'GET':
            case 'DELETE':
            {
                return [];
            }
            case 'POST':
            {
                 return [
                   'name.*'        => 'required',
                   'description.*' => 'required',
                   'logo'          => 'required|image|max:3000',
                   'logo_alt'      => 'required|image|max:3000'
                ];
            }
            case 'PUT':
            {
                return [
                   'description.*' => 'required',
                   'logo'          => 'nullable|image|max:3000',
                   'logo_alt'      => 'nullable|image|max:3000'
                ];
            }
            case 'PATCH':
            {
                return [];
            }
            default:break;
        }
    }

В приведенном выше примере POST будет для вашего создания, а PUT будет для вашего обновления.

Обратите внимание, что я использовал nullable для правил проверки PUT, это говорит объекту запроса, что поле является необязательным.

...