Laravel 中间件返回(尝试获取非对象的 属性 'headers')错误
Laravel middleware returning (Trying to get property 'headers' of non-object) error
当我将资源路由包装到我的自定义中间件时,我收到 错误
我的中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class Officer
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}
// elseif (Auth::check() && Auth::user()->role == 'agent') {
// return redirect('/agent');
// }
// else {
// return redirect('/customer');
// }
}
}
资源路由使用中间件:
Route::resource('new-order', 'BackendController')->middleware('officer');
我遇到错误:
(Trying to get property 'headers' of non-object).
如何解决?
当您的 if
条件不满足时,尝试添加一个 else
块 returns:
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}else{
return back();
}
}
在中间件中,重要的是处理所有情况,return 相应地重定向或中止。
当您想让系统继续处理前面的请求时,您可以return $next($request);
。
但是,如果万一if (Auth::check() && Auth::user()->role == 'title_officer')
条件失败,你没有提到系统应该做什么。
如果您不想将页面显示为可用,您可以 abort(404)
或者 abort(403)
禁止访问。
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}
abort(403);
}
但请确保您没有添加会造成无限循环的案例。请检查 documentation 以获得更多选项。
只需在中间件中使用类似这样的东西:RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
// your condition
return redirect('the route name');
}
}
晚了但是.. 当 DB 中的列为空时,这发生在我身上。
我有这个错误。在我的控制器中我有
return route('dashboard')
而不是
return redirect()->route('dashboard')
这应该可以解决它
当我将资源路由包装到我的自定义中间件时,我收到 错误
我的中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class Officer
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}
// elseif (Auth::check() && Auth::user()->role == 'agent') {
// return redirect('/agent');
// }
// else {
// return redirect('/customer');
// }
}
}
资源路由使用中间件:
Route::resource('new-order', 'BackendController')->middleware('officer');
我遇到错误:
(Trying to get property 'headers' of non-object).
如何解决?
当您的 if
条件不满足时,尝试添加一个 else
块 returns:
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}else{
return back();
}
}
在中间件中,重要的是处理所有情况,return 相应地重定向或中止。
当您想让系统继续处理前面的请求时,您可以return $next($request);
。
但是,如果万一if (Auth::check() && Auth::user()->role == 'title_officer')
条件失败,你没有提到系统应该做什么。
如果您不想将页面显示为可用,您可以 abort(404)
或者 abort(403)
禁止访问。
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->role == 'title_officer') {
return $next($request);
}
abort(403);
}
但请确保您没有添加会造成无限循环的案例。请检查 documentation 以获得更多选项。
只需在中间件中使用类似这样的东西:RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
// your condition
return redirect('the route name');
}
}
晚了但是.. 当 DB 中的列为空时,这发生在我身上。
我有这个错误。在我的控制器中我有
return route('dashboard')
而不是
return redirect()->route('dashboard')
这应该可以解决它