我正在尝试创建一个中间件来检查当前路由的方法操作。
我的中间件如下:
<?php
namespace App\Http\Middleware;
use Closure;
use Route;
class PermissionMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$currentAction = Route::currentRouteAction();
list($nothing,$route_action) = explode('App\Http\Controllers\\', $currentAction);
$user_methods=session('userdata')['route_actions'];
if((empty($user_methods))||!$user_methods->contains($route_action))
{
return redirect('denied');
}
return $next($request);
}
}
但是当我转到路线时,它会抛出如下所示的错误
表示
Undefined offset: 1 in PermissionMiddleware.php (line 21)
我不知道如何解决该错误。
我需要一个指南来解决这个问题
谢谢
最佳答案
实际上,您的问题不是 Route::currentRouteAction()
而是在以下行之后:
list($nothing, $route_action) = explode('App\Http\Controllers\\', $currentAction);
发生的位置不是很明显,但您应该检查以下行:
$user_methods = session('userdata')['route_actions'];
确保 session('userdata')
返回预期结果,例如:
if ($userData = session('userdata')) {
if (isset($userData['route_actions'])) {
$user_methods = $userData['route_actions'];
// ...
}
}
此外,您可以使用 $request->route()->getActionName()
来获得相同的结果,而不是使用 Route::currentRouteAction()
。还有其他有用的方法可用于获取有关路线操作的信息,例如:
$request->route()->getActionMethod(); // get the method name
$request->route()->getAction(); // get an array containing many information
关于php - Route::currentRouteAction 在 laravel 5.4 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44903428/