Laravel 5.7 Правила валидации - PullRequest
0 голосов
/ 31 октября 2018

Когда я отправляю форму, это то, что я делаю, чтобы проверить мои поля ...

<?php

$this->validate($request, [
    'name' => __('required|max:255|unique:templates,name,NULL,id,company_id,:company_id', [
        'company_id' => $request->input('companies')
    ]),
    'modules' => 'required|numeric',
    'companies' => 'required|numeric',
    'start_date' => 'required_with:limited_availability|date|before:end_date',
    'end_date' => 'required_with:limited_availability|date|after:start_date',
    'indesign_location' => __('required|file|mimetypes:application/zip|max::max_upload_size', [
        'max_upload_size' => config('file.max_size')
    ])
]);

Чего я хочу достичь: Поля start_date и end_date должны быть обязательными (и, следовательно, проверяться) только при наличии поля limited_availability.

Что происходит сейчас: Я не получаю сообщение о том, что поле является обязательным, но я получаю сообщение об ошибке в обоих полях даты, что указанная дата недопустима.

limited_availability - это флажок, и start_date и end_date являются полями ввода даты.

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Может быть, это наивное решение. Но я уверен, что это сработает.

// First thing we separate the validation rule and save it in a variable
$rules = [
    'name'                 => __( 'required|max:255|unique:templates,name,NULL,id,company_id,:company_id', [
        'company_id' => $request->input( 'companies' )
    ] ),
    'modules'              => 'required|numeric',
    'companies'            => 'required|numeric',
    'indesign_location'    => __( 'required|file|mimetypes:application/zip|max::max_upload_size', [
        'max_upload_size' => config( 'file.max_size' )
    ] )
];

// the solution is here
if ($request->has('limited_availability')) {
    $rules['start_date'] = 'required|date|before:end_date';
    $rules['end_date']   = 'require|date|after:start_date';
}

$this->validate( $request, $rules);

Надеюсь, это поможет.

0 голосов
/ 31 октября 2018

Вы можете достичь с помощью любого из этих правил проверки. Поставьте запятую и она будет считаться вторым параметром.

'start_date' => 'required_if:limited_availability,'
'end_date' => 'required_if:limited_availability,' 

or

 'start_date' => 'required_without:limited_availability,'
 'end_date' => 'required_without:limited_availability,'
...