如何使用带有 url 参数和错误消息的 auth 中间件的 redirectTo 方法?
How can I use auth middleware's redirectTo method with url parameter and error message?
我想要做的就是使用 URL 和一个语言参数,它会导致我想向用户显示错误消息。如果我执行注释代码,我得到错误;
Header may not contain more than a single header, new line detected.
另一方面,如果我执行未包含在注释中的代码,则会出现错误;
Call to a member function with () on string.
我知道错误的原因。但是,我正在寻找一种解决方案来实现我的目标。
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
// return \Redirect::route('login', app()->getLocale())->with('error', 'Error message');
return route('login', ['locale' => app()->getLocale()])->with('error', 'Error message');
}
}
}
不能在route()
方法上调用with()
,因为route()
方法只是returns一个字符串,不负责重定向。
如果您需要在调用 redirectTo()
方法后向用户显示错误消息,我认为您可以将错误消息保留在 Laravel Session
中
https://laravel.com/docs/8.x/session#interacting-with-the-session
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
// This next line keeps the error message in session for you to use on your redirect and then deletes it from session immediately after it has been used
$request->session()->flash('error', 'Error message!');
return route('login', ['locale' => app()->getLocale()]);
}
}
您现在可以像往常一样查看错误消息:
在您的控制器中:
$request->session()->get('error');
或者从您的角度来看:
{{ Session::get('error) }}
尝试你不能在 redirect()
中传递 2 个参数它接受 url 而不是路由名称
return redirect()->route('login', ['locale' => app()->getLocale()])->with('error', 'Error message');
我想要做的就是使用 URL 和一个语言参数,它会导致我想向用户显示错误消息。如果我执行注释代码,我得到错误;
Header may not contain more than a single header, new line detected.
另一方面,如果我执行未包含在注释中的代码,则会出现错误;
Call to a member function with () on string.
我知道错误的原因。但是,我正在寻找一种解决方案来实现我的目标。
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*
* @param \Illuminate\Http\Request $request
* @return string|null
*/
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
// return \Redirect::route('login', app()->getLocale())->with('error', 'Error message');
return route('login', ['locale' => app()->getLocale()])->with('error', 'Error message');
}
}
}
不能在route()
方法上调用with()
,因为route()
方法只是returns一个字符串,不负责重定向。
如果您需要在调用 redirectTo()
方法后向用户显示错误消息,我认为您可以将错误消息保留在 Laravel Session
中
https://laravel.com/docs/8.x/session#interacting-with-the-session
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
// This next line keeps the error message in session for you to use on your redirect and then deletes it from session immediately after it has been used
$request->session()->flash('error', 'Error message!');
return route('login', ['locale' => app()->getLocale()]);
}
}
您现在可以像往常一样查看错误消息:
在您的控制器中:
$request->session()->get('error');
或者从您的角度来看:
{{ Session::get('error) }}
尝试你不能在 redirect()
中传递 2 个参数它接受 url 而不是路由名称
return redirect()->route('login', ['locale' => app()->getLocale()])->with('error', 'Error message');