Route :: currentRouteAction在laravel 5.4中不起作用

时间:2017-07-04 10:26:05

标签: php laravel laravel-5.4 laravel-routing laravel-middleware

我正在尝试创建一个中间件来检查当前路由的方法操作。

我的中间件如下:

<?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);

 }
}

但是当我去路线时,它会抛出一个错误,如下所示

enter image description here

指示

  

未定义的偏移量:1   在PermissionMiddleware.php(第21行)

我无法弄清楚如何解决错误。

我需要一本指南来解决这个问题

谢谢

1 个答案:

答案 0 :(得分:0)

实际上,您的问题不是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