フォームアクションが例外をスローした場合、指定されたPOST
パラメーターを使用してフォームページにリダイレクトする方法を教えてください。
以下を使用できます。
return Redirect::back()->withInput(Input::all());
Form Request Validation を使用している場合、これはまさに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();
@ infomaniacが示すように、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();
}
Laravel 5:
return redirect(...)->withInput();
背面のみ:
return back()->withInput();
これは間違いなく動作します !!!
$v = Validator::make($request->all(),[
'name' => ['Required','alpha']
]);
if($v->passes()){
$ab = $request->name;
print_r($ab);
}
else{
//this will return the errors & to check put "dd($errors);" in your blade(view)
return back()->withErrors($v)->withInput();
}
$request->flash('request',$request);
<input type="text" class="form-control" name="name" value="{{ old('name') }}">
わたしにはできる。