【问题标题】:Route::currentRouteAction not working in laravel 5.4Route::currentRouteAction 在 laravel 5.4 中不起作用
【发布时间】:2017-12-07 18:38:11
【问题描述】:

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

我的中间件如下:

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

 }
}

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

表示

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

我不知道如何解决这个错误。

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    其实你的问题不在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-&gt;route()-&gt;getActionName() 来获得相同的结果,而不是使用Route::currentRouteAction()。还有其他有用的方法可用于获取有关路由操作的信息,例如:

    $request->route()->getActionMethod(); // get the method name
    
    $request->route()->getAction(); // get an array containing many information
    

    【讨论】:

    • 感谢@The Alpha 的指导。但是,似乎 route() 在中间件中不可用,因为当我尝试您提供的示例时,它返回一个错误,表明我在 null 上调用 getActionMethod。在 null 上调用成员函数 getActionName()
    • 您应该可以使用$request-&gt;route()-&gt;getActionMethod()$request-&gt;route()-&gt;getAction()
    猜你喜欢
    • 2018-02-17
    • 2018-12-01
    • 1970-01-01
    • 2017-09-21
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多