Laravel 5.1 Изменить входные данные перед проверкой запроса формы

Есть ли способ изменить поля ввода внутри класса запроса формы до проверки?

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

Когда я устанавливаю поле ввода $this->start_dt в 2016-02-06 12:00:00 и $this->end_dt до 2016-02-06 13:00:00 я все еще получаю ошибку проверки «end_dt должен быть после start_dt» , Это означает, что значения входных запросов не изменяются при обновлении $this->start_dt и $this->end_dt внутри функции rules() .

 public function rules() { if ($this->start_dt){ $this->start_dt = Carbon::createFromFormat('d MYH:i:s', $this->start_dt . ' ' . $this->start_hr . ':'. $this->start_min . ':00'); } if ($this->end_dt){ $this->end_dt = Carbon::createFromFormat('d MYH:i:s', $this->end_dt . ' ' . $this->end_hr . ':'. $this->end_min . ':00'); } return [ 'start_dt' => 'required|date|after:yesterday', 'end_dt' => 'required|date|after:start_dt|before:' . Carbon::parse($this->start_dt)->addDays(30) ]; } 

Примечание: start_dt и end_dt являются полями end_dt даты, а start_hr , start_min – полями. Поэтому мне нужно создать дату-время, объединив все поля, чтобы я мог сравнивать.

Related of "Laravel 5.1 Изменить входные данные перед проверкой запроса формы"

Начиная с laravel 5.4 вы можете переопределить метод prepareForValidation ValidatesWhenResolvedTrait для изменения любого ввода. Что-то подобное должно быть возможно для laravel 5.1.

Пример в вашем запросе

 /** * Modify the input values * * @return void */ protected function prepareForValidation() { // get the input $input = array_map('trim', $this->all()); // check newsletter if (!isset($input['newsletter'])) { $input['newsletter'] = false; } // replace old input with new input $this->replace($input); } 

FormRequest имеет метод validationData (), который возвращает данные для проверки, поэтому я переопределяю его в запросе формы:

 <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class MyClassRequest extends FormRequest { ... /** * Get data to be validated from the request. * * @return array */ public function validationData() { return array_merge( $this->all(), [ 'number' => preg_replace("/[^0-9]/", "", $this->number) ] ); } ... } 

Он отлично работает, я использую Laravel 5.4 🙂

Вы можете сделать что-то вроде следующего:

 public function rules(Request $request) { if ($request->has('start_dt')){ $request->replace('start_dt', Carbon::createFromFormat('d MYH:i:s', $request->start_dt . ' ' . $request->start_hr . ':'. $request->start_min . ':00')); } if ($request->has('end_dt')){ $request->replace('end_dt' ,Carbon::createFromFormat('d MYH:i:s', $request->end_dt . ' ' . $request->end_hr . ':'. $request->end_min . ':00')); } return [ 'start_dt' => 'required|date|after:yesterday', 'end_dt' => 'required|date|after:start_dt|before:' . Carbon::parse($request->start_dt)->addDays(30) ]; }