Laravel 5 表单请求,创建时需要输入,但编辑时可选

Car*_*zar 5 laravel laravel-5 laravel-validation laravel-request laravel-5.6

我正在使用 laravel 5.6 resources controllersform 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'
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

创建程序时必须发送字段logo和,但编辑程序时发送是可选的。logo_altlogo

有没有办法用相同的方式验证这两种情况,form request或者我必须创建不同的情况form request来进行编辑和创建?

use*_*492 7

您可以用来$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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,POST将用于您的创建,并将PUT用于您的更新。

请注意,我使用了验证nullable规则PUT,这告诉请求对象该字段是可选的。