Как перенаправить обратно в форму с помощью ввода - Laravel 5
Как мне перенаправить обратно на страницу формы с заданными параметрами POST
, если мое действие формы вызывает исключение?
6 answers
Вы можете использовать следующее:
return Redirect::back()->withInput(Input::all());
Если вы используете Проверку запроса формы , именно так Laravel перенаправит вас обратно с ошибками и заданными входными данными.
Выдержка из \Illuminate\Foundation\Validation\ValidatesRequests
:
return redirect()->to($this->getRedirectUrl()) ->withInput($request->input()) ->withErrors($errors, $this->errorBag());
Напишите старую функцию для значения ваших полей , например
<input type="text" name="username" value="{{ old('username') }}">
В своем HTML вы должны использовать value = {{ old('') }}
. Без его использования вы не сможете вернуть значение, потому что какой сеанс будет храниться в их кэше.
Как и для проверки имени, это будет -
<input type="text" name="name" value="{{ old('name') }}" />
Теперь вы можете получить значение после его отправки, если произошла ошибка с перенаправлением.
return redirect()->back()->withInput();
Как @ инфоманьяк говорит, что вы также можете использовать Input class
напрямую,
return Redirect::back()->withInput(Input::all());
Добавить:
Если вы показываете только определенное поле, то используйте $request->only()
return redirect()->back()->withInput($request->only('name'));
Надеюсь, это может сработать в любом случае, спасибо.
Я обрабатываю исключения проверки в Laravel 5.3 следующим образом. Если вы используете Laravel Collective, он автоматически отобразит ошибки рядом с входными данными, а если вы используете laracasts/flash, он также покажет первую ошибку проверки в качестве уведомления.
Handler.php
визуализация:
public function render($request, Exception $e)
{
if ($e instanceof \Illuminate\Validation\ValidationException) {
return $this->handleValidationException($request, $e);
}
(..)
}
И функция:
protected function handleValidationException($request, $e)
{
$errors = @$e->validator->errors()->toArray();
$message = null;
if (count($errors)) {
$firstKey = array_keys($errors)[0];
$message = @$e->validator->errors()->get($firstKey)[0];
if (strlen($message) == 0) {
$message = "An error has occurred when trying to register";
}
}
if ($message == null) {
$message = "An unknown error has occured";
}
\Flash::error($message);
return \Illuminate\Support\Facades\Redirect::back()->withErrors($e->validator)->withInput();
}
Ларавель 5:
return redirect(...)->withInput();
Только для спины:
return back()->withInput();
Не могу прокомментировать ответ выше из-за переполнения стека глупыми правилами.
При использовании ответа infomaniac убедитесь, что вы включили пространство имен:
Ларавель все равно отстой по сравнению с yii... Ларавель настолько неорганизован и не имеет подробных примеров.
use Illuminate\Support\Facades\Redirect;
class ... {
}