如何在流明框架中获取中间件的当前路由?

时间:2015-09-28 08:17:34

标签: php laravel permissions middleware lumen

我使用流明开发了API应用程序。并用于访问权限控制。我想在中间件中获取当前路由。但是,我总是无效:

   $route = $request->route();

我已经尝试使用routeMiddleware和dispatcher的Can I get current route information in middleware with Lumen?。但它仍然返回null。我怎样才能获得中间件的当前路线?

非常感谢..

10 个答案:

答案 0 :(得分:2)

请更新您的流明...一切正常无效

namespace App\Http\Middleware;

public function handle($request, Closure $next)
{
    $route = $request->route();
    $path = $request->getPathInfo();

    // your code here
    return $next($request);
}

答案 1 :(得分:1)

maybe this

$request   = new \Illuminate\Http\Request;
$method    = $request->getMethod();
$pathInfo  = app()->getPathInfo();
$routeName = app()->getRoutes()[$method.$pathInfo]['action']['as'];

答案 2 :(得分:1)

有一种更优雅的方式。

如果尚未扩展Application类并添加此额外方法:

use Laravel\Lumen\Application;

class YourApplication extends Application
{
    /** override other methods if needed */

    /**
     * @return string
     */
    public function getCurrentRoute()
    {
        return $this->currentRoute;
    }

}

然后您可以在中间件中访问它,如下所示:

$route = app()->getCurrentRoute();
$action = $route[1];
$info = $action['uses']; // string(57) "YourApp\Http\Controller\Public\UserController@view"

答案 3 :(得分:0)

True/False

将返回路线的名称;

答案 4 :(得分:0)

不幸的是,这是不可能的。至少它并不像调用getCurrentRoute()那么简单。

您需要经历路线收集并再次与请求路径匹配。

看看这个粗略的例子:https://gist.github.com/radmen/92200c62b633320b98a8

请注意,此代码的某些部分可能无效;)我已从我的应用程序中提取此代码(略有不同的用例)并尝试将其与您的案例相符。

答案 5 :(得分:0)

在全局中间件中,您不能直接从请求中获取路由,但是如果在routeMiddleware中则可以获取。

因此,只需使用routeMiddleware,在中间件中使用$request->route()

如果您只想在全局中间件中获取它,只需克隆$ request并设置一个调度程序

答案 6 :(得分:0)

实际上不是。流明正在使用完全不同的路由器,而不是本地的laravel路由器。所以不一样。尽管流明是基于laravel的,但有些引擎(或者我应该说引擎的近60%是不同的。包括使用Nikic / fastroute的路由器应用程序。...

答案 7 :(得分:0)

$uri = $request->path();

从Lumen文档中: https://lumen.laravel.com/docs/5.8/requests

答案 8 :(得分:0)

创建中间件

<?php

namespace App\Http\Middleware;

use Closure;

class RouteNameMiddleware
{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        $request->attributes->set('currentRouteName', array_search($request->getPathInfo(), app()->router->namedRoutes));

        // your code here
        return $next($request);
    }
}

然后您可以在Controller / Blade View中访问您的属性

app('request')->get('currentRouteName')

答案 9 :(得分:-1)

来自Laravel文档:

http://laravel.com/docs/5.1/requests#basic-request-information

  

path方法返回请求的URI。因此,如果传入请求的目标是http://domain.com/foo/bar,则路径方法将返回foo / bar:

$uri = $request->path();

甚至还有其他方法可以帮到您:

if ($request->is('admin/*')) {
    // do something
}