我在Laravel 5中创建了一个简单的联系表单,使用Request对象和Validator对象检查我的输入是否有错误。
我视图中的表单是用HTML编码的,而不是Laravel表单对象,Laravel 5中默认不包含该对象。
我需要设置我的表单,以便在验证规则失败时,用户的输入会闪烁到会话中,以便在页面重定向时它不会消失。我能够通过在验证码之前在POST控制器中放置$ request-> flash()来实现此目的。
但是,如果验证通过并且表单已成功通过电子邮件发送,我不希望数据闪烁(即表单应重置)。由于Laravel自动帮助处理重定向,因此我无法在$ this-> validate块中实现此目的。
如果出现验证错误,我怎么能告诉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!');
}
}
答案 0 :(得分:5)
如果像我这样的人不知道如何获得旧的价值并以某种方式结束,请点击此处:
<input value="{{ old('var_name') }}">
当Laravel为您提供这样的帮助时,我不会发现您需要访问会话数据。
希望有所帮助,祝你有愉快的一天。 =)
答案 1 :(得分:1)
只需删除以下代码行:
$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。
答案 2 :(得分:0)
如果验证失败,要恢复旧值,输入的数据将显示视图
value="{{ (old('title')) ? old('title') : $data->title}}