Как я могу условно проверить пользовательское правило в Laravel? - PullRequest
0 голосов
/ 20 марта 2020

В моем контроллере у меня есть метод store, который проверяет данные запроса:

$request->validate([
    'title' => 'required',
    'description' => 'required',
    'date' => [
        'required',
        new DateFormatRule
    ],
    'closed' => 'nullable',
    'time_start' => 'required_if:closed,0',
    'time_end' => [
        'required_if:closed,0',
        new TimeDurationRule($request->time_start)
    ],
]);

closed - логическое значение. Если closed равно false, поля time_start и time_end обязательны для заполнения. Кажется, это работает как ожидалось.

Однако, если я отправлю запрос с closed как истина, я попаду в свой пользовательский TimeDurationRule:

'time_end' => [
    'required_if:closed,0',
    new TimeDurationRule($request->time_start)
], 

Как можно Я делаю new TimeDurationRule($request->time_start) условным? Например, если closed истинно, я вручную устанавливаю time_end на null, поэтому time_start / time_end не нужно значение (не требуется).

Если я комментирую свой пользовательский исключаю, все работает как положено.

Спасибо за любые предложения!

1 Ответ

1 голос
/ 20 марта 2020

Вы можете передать $request->closed своему TimeDurationRule, а затем в passes методе rule, вы можете сделать что-то вроде этого:

class TimeDurationRule implements Rule
{
    public $closed;

    public function __construct(/*all needed parameters*/, $closed)
    {
        $this->closed = $closed;
    }

    public function passes($attribute, $value)
    {
        if(!$closed){ 
         return true
        }

        // the rest of validation logic
    }
}

И затем

new TimeDurationRule(/*all needed parameters*/, $request->closed)

Вы также можете прочитать об этом здесь: https://laracasts.com/discuss/channels/laravel/create-custom-validation-rule-with-additional-parameters-implement-in-request

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...