проверка правильности даты строительства деталей - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь проверить дату, но она не работает, я пытаюсь восстановить дату по частям, и в моей функции очистки я добавляю значение, которое будет проверено в запросе. Дата, которую я передаю, является недопустимой датой, чтобы попытаться выдать ошибку, но я не заставляю ее работать в моем классе запроса. Я ввожу 2020-02-30 для даты, которая недействительна, потому что такой даты не существует

    $this->request->add(['event_date' => date('Y-m-d', strtotime($this->request->get('month') . '/' . $this->request->get('day') . '/' . $this->request->get('year')))]);

    $input = $this->all();

    $input['owner_firstname'] = filter_var($input['owner_firstname'], FILTER_SANITIZE_STRING);

    ....
    ....
    $this->merge($input);  


    $rules = [
        'owner_firstname'       => 'required|min:2|max:30',
        'owner_lastname'        => 'required|min:2|max:30',
        'owner_email'           => 'email',
        'owner_type'            => 'required',
        'partner_firstname'     => 'required|min:2|max:30',
        'partner_lastname'      => 'required|min:2|max:30',
        'partner_email '        => 'email',
        'partner_type'          => 'required',
        'month'                 => 'not_in:0',
        'day'                   => 'not_in:0',
        'year'                  => 'required|digits:4|integer|min:' . date('Y') . '|max:'. (date('Y', strtotime('+9 months'))),
        'event_date'            => 'date',
        'event_city'            => 'required|not_in:0',
        'event_country'         => 'required|not_in:0',
        'number_of_guests'      => 'required',
        'guests_message'        => 'required|min:30|max:5000',
    ];

1 Ответ

0 голосов
/ 27 июня 2019

2 вещи:

1) Проверка проходит успешно из-за того, как вы строите строку даты для отправки в валидатор.

date('Y-m-d', strtotime('02/30/2020'))  // This becomes "2020-03-01"

Таким образом, с 1 марта 2020 года действительная дата проходит валидацию. Вместо этого вы можете просто сконструировать строку даты с помощью тире.

2) Бывают случаи (например, запросы AJAX), когда вызов $this->request->add() не добавляет параметр к результату, который вы получаете при вызове $this->all(). Попробуйте вместо этого добавить параметр с merge().

// This will set the date as '2020-02-30' and fail validation
$this->merge(['event_date' => $this->request->get('year') . '-' . $this->request->get('month') . '-' . $this->request->get('day')]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...