将资源路由包装到自定义中间件时出现错误错误
我的中间件:
<?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');
我遇到错误:
(尝试获取非对象的属性“标头”)。
如何解决?
答案 0 :(得分:0)
尝试添加一个.
块,当不满足您的else
条件时返回该块:
if
答案 1 :(得分:0)
在中间件中,处理所有情况并相应地返回重定向或中止很重要。
要允许系统继续处理前面的请求时,您执行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了解更多选项。
答案 2 :(得分:0)
只需在中间件中使用以下内容:RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
// your condition
return redirect('the route name');
}
}
答案 3 :(得分:0)
但是,..当DB中的列为空时,这会发生在我身上。
答案 4 :(得分:0)
我在创建管理仪表板页面时也遇到了同样的问题,但在“if-else”条件后添加 return $next($request);
行后,我的问题得到了解决,
这是我的代码:
public function handle(Request $request, Closure $next)
{
if($request->session()->has('ADMIN_LOGIN')){
#
}else{
$request->session()->flash('error', 'Access Denied');
return redirect('admin');
}
return $next($request);
}