我有一个网站,其中包含两个不同的登录表单,分别位于2个位置,一个位于导航栏上,另一个是登录页面,系统会在系统捕获未记录的访问者时使用。
我是否可以在LoginRequest.php中询问我做错了什么?如果登录过程中出现任何类型的错误,我会设置一个重定向到自定义登录页面的条件?我的代码如下:
<?php namespace App\Http\Requests;
use App\Http\Requests\Request;
class LoginRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'login_email' => 'required',
'login_password' => 'required'
];
}
public function messages()
{
return [
'login_email.required' => 'Email cannot be blank',
'login_password.required' => 'Password cannot be blank'
];
}
public function redirect()
{
return redirect()->route('login');
}
}
如果登录页面有任何错误但代码似乎没有重定向,则代码会重定向从导航栏登录的用户。
谢谢。
答案 0 :(得分:7)
找到解决方案。我需要做的就是覆盖
的初始响应像这样,它就像一个魅力。FormRequest.php
public function response(array $errors)
{
// Optionally, send a custom response on authorize failure
// (default is to just redirect to initial page with errors)
//
// Can return a response, a view, a redirect, or whatever else
if ($this->ajax() || $this->wantsJson())
{
return new JsonResponse($errors, 422);
}
return $this->redirector->to('login')
->withInput($this->except($this->dontFlash))
->withErrors($errors, $this->errorBag);
}
答案 1 :(得分:3)
如果您想重定向到特定网址,请使用protected $redirect
class LoginRequest extends Request
{
protected $redirect = "/login#form1";
// ...
}
或者如果要重定向到指定路线,请使用$redirectRoute
class LoginRequest extends Request
{
protected $redirectRoute = "session.login";
// ...
}
答案 2 :(得分:1)
如果您在validate()
Controller
方法
$this->validate($request, $rules);
然后,您可以覆盖您所延伸的基础buildFailedValidationResponse
上的ValidatesRequests
特征中的Controller
。
这一行:
protected function buildFailedValidationResponse(Request $request, array $errors)
{
if ($request->expectsJson()) {
return new JsonResponse($errors, 422);
}
return redirect()->route('login');
}
答案 3 :(得分:1)
如果您不想对请求使用validate方法,可以使用Validator外观手动创建验证程序实例。 Facade上的make方法生成一个新的验证器实例:请参阅Laravel Validation
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// Store the blog post...
}
答案 4 :(得分:1)
这在Lara 7中有效 如果验证失败,请添加锚点以跳至评论表单
protected function getRedirectUrl()
{
return parent::getRedirectUrl() . '#comment-form';
}
答案 5 :(得分:0)
已经提供了此答案的变体,但是覆盖 custom request 中的 getRedirectUrl()
方法可以让您定义路由参数,而不仅仅是 $redirectRoute
属性的名称优惠。