У меня есть форма:
{!! Form::model($profile, ['method' => 'PATCH', 'action' => ['ProfileController@update']]) !!}
{!! Form::text('location_name', null, ['id' => 'location_name', 'class' => 'js-location-lookup']) !!}
{!! Form::hidden('location_id', null, ['id' => 'location_id']) !!}
{!! errors_for('location_id', $errors) !!}
<button type="submit">Submit</button>
{!! Form::close() !!}
Ввод location_name является функцией автозаполнения и предоставляет пользователю предложения при вводе и при выборе местоположения location_id заполняется с помощью jquery.
Однако, если пользователь случайно набирает мусор или неизвестное местоположение или вставляет значение местоположения, то location_id не устанавливается. В этом сценарии, когда они нажимают кнопку отправки, запускается приведенная ниже проверка, но когда форма повторно отображается с ошибками, поле location_name по-прежнему имеет старое введенное пользователем значение.
Если не указан location_id, как я могу сбросить значение location_name в пустую строку?
Для проверки я использую запрос формы, как показано ниже, и пытаюсь сбросить значение location_name в методе failvalidation, но он не работает:
class ProfileRequest extends FormRequest {
public function authorize()
{
return true;
}
public function rules()
{
return = [
'location_id' => 'required'
];
}
protected function failedValidation(Validator $validator)
{
if ($validator->errors()->has('location_id')) {
$this->location_name = ''; // this doesn't work?
}
throw (new ValidationException($validator))
->errorBag($this->errorBag)
->redirectTo($this->getRedirectUrl());
}
}