代码之家  ›  专栏  ›  技术社区  ›  Carlos Salazar

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

  •  2
  • Carlos Salazar  · 技术社区  · 7 年前

    我用拉拉维尔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 必须在创建程序时发送,但在编辑程序时发送 标志 是可选的。

    是否有一种方法同时验证这两种情况 表单请求 或者我必须创造一个不同的 表单请求 用于编辑和创建?

    2 回复  |  直到 7 年前
        1
  •  1
  •   user3574492    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;
            }
        }
    

    在上面的例子中 POST 将为您的创作和 PUT 将为您更新。

    注意我用过 nullable 对于 投入 验证规则,它告诉请求对象该字段是可选的。

        2
  •  0
  •   Marcin Nabiałek    7 年前

    而不是:

     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和logo。可以使用管道语法 | 也可以,但是对于规则使用数组语法更方便,以便以后在需要时执行这些操作。