如果验证器在 Laravel 5 中失败,您如何刷新请求数据?
How do you flash Request data if a Validator fails in Laravel 5?
我在 Laravel 5 中创建了一个简单的联系表单,使用 Request 对象和 Validator 对象来检查我的输入是否有错误。
我认为表单是在 HTML 中编码的,而不是 Laravel 表单对象,后者默认不包含在 Laravel 5 中。
我需要设置我的表单,以便在验证规则失败时,用户的输入会闪现到会话中,这样它就不会在页面重定向时消失。我可以通过在 POST 控制器中,在验证代码之前放置一个 $request->flash() 来实现这一点。
但是,如果验证通过并且表单已成功通过电子邮件发送,我不希望闪现数据(即,应重置表单)。我没有明显的方法在 $this->validate 块中完成此操作,因为 Laravel 有助于自动处理重定向。
如何告诉 Laravel 只有在出现验证错误时才刷新表单数据?
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ContactController extends Controller
{
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
return view('contact');
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// Flash current input in case the validator fails and redirects
$request->flash();
// Validate the form request, redirect on fail
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'subject' => 'required',
'message' => 'required|min:5',
]);
// Generate email from template and send
\Mail::send('emails.feedback',
array(
'name' => $request->get('name'),
'email' => $request->get('email'),
'user_message' => $request->get('message'),
'subject' => $request->get('subject')
), function ($message) use ($request) {
$message->from(\Config::get('site.from_email'));
$message->to(\Config::get('site.contact_email'), 'Admin');
$message->subject(\Config::get('site.name') . ': ' . $request->get('subject'));
});
// Redirect to Contact route with success message
return \Redirect::route('contact')
->with('message', 'Thanks for contacting us!');
}
}
?>
只需删除以下代码行:
$request->flash();
Laravel 将通过在验证失败时闪烁数据来为您解决这个问题。以下方法在验证失败时被调用:
/**
* Create the response for when a request fails validation.
*
* @param \Illuminate\Http\Request $request
* @param array $errors
* @return \Illuminate\Http\Response
*/
protected function buildFailedValidationResponse(Request $request, array $errors)
{
if ($request->ajax() || $request->wantsJson()) {
return new JsonResponse($errors, 422);
}
return redirect()->to($this->getRedirectUrl())
->withInput($request->input()) // <-- Flashes inputs
->withErrors($errors, $this->errorBag()); // <-- Flashes errors
}
这是您的控制器中用于验证请求的特征,它位于 Illuminate/Foundation/Validation
,名称为 ValidatesRequests
。检查一下以澄清自己。
或者,如果出于任何原因需要,您可以手动执行此操作,请选中 the documentation。
如果有人像我一样不知道如何获取旧值并以某种方式结束在这里,那就是:
<input value="{{ old('var_name') }}">
当 Laravel 为您提供这样的帮助程序时,我认为您不需要访问会话数据。
希望对您有所帮助,祝您有愉快的一天。 =)
要在验证失败时恢复旧值,输入的数据将显示视图
value="{{ (old('title')) ? old('title') : $data->title}}
我在 Laravel 5 中创建了一个简单的联系表单,使用 Request 对象和 Validator 对象来检查我的输入是否有错误。
我认为表单是在 HTML 中编码的,而不是 Laravel 表单对象,后者默认不包含在 Laravel 5 中。
我需要设置我的表单,以便在验证规则失败时,用户的输入会闪现到会话中,这样它就不会在页面重定向时消失。我可以通过在 POST 控制器中,在验证代码之前放置一个 $request->flash() 来实现这一点。
但是,如果验证通过并且表单已成功通过电子邮件发送,我不希望闪现数据(即,应重置表单)。我没有明显的方法在 $this->validate 块中完成此操作,因为 Laravel 有助于自动处理重定向。
如何告诉 Laravel 只有在出现验证错误时才刷新表单数据?
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ContactController extends Controller
{
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
return view('contact');
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// Flash current input in case the validator fails and redirects
$request->flash();
// Validate the form request, redirect on fail
$this->validate($request, [
'name' => 'required',
'email' => 'required|email',
'subject' => 'required',
'message' => 'required|min:5',
]);
// Generate email from template and send
\Mail::send('emails.feedback',
array(
'name' => $request->get('name'),
'email' => $request->get('email'),
'user_message' => $request->get('message'),
'subject' => $request->get('subject')
), function ($message) use ($request) {
$message->from(\Config::get('site.from_email'));
$message->to(\Config::get('site.contact_email'), 'Admin');
$message->subject(\Config::get('site.name') . ': ' . $request->get('subject'));
});
// Redirect to Contact route with success message
return \Redirect::route('contact')
->with('message', 'Thanks for contacting us!');
}
}
?>
只需删除以下代码行:
$request->flash();
Laravel 将通过在验证失败时闪烁数据来为您解决这个问题。以下方法在验证失败时被调用:
/**
* Create the response for when a request fails validation.
*
* @param \Illuminate\Http\Request $request
* @param array $errors
* @return \Illuminate\Http\Response
*/
protected function buildFailedValidationResponse(Request $request, array $errors)
{
if ($request->ajax() || $request->wantsJson()) {
return new JsonResponse($errors, 422);
}
return redirect()->to($this->getRedirectUrl())
->withInput($request->input()) // <-- Flashes inputs
->withErrors($errors, $this->errorBag()); // <-- Flashes errors
}
这是您的控制器中用于验证请求的特征,它位于 Illuminate/Foundation/Validation
,名称为 ValidatesRequests
。检查一下以澄清自己。
或者,如果出于任何原因需要,您可以手动执行此操作,请选中 the documentation。
如果有人像我一样不知道如何获取旧值并以某种方式结束在这里,那就是:
<input value="{{ old('var_name') }}">
当 Laravel 为您提供这样的帮助程序时,我认为您不需要访问会话数据。
希望对您有所帮助,祝您有愉快的一天。 =)
要在验证失败时恢复旧值,输入的数据将显示视图
value="{{ (old('title')) ? old('title') : $data->title}}