如何在Laravel中获取中间件路由

时间:2014-11-12 13:02:09

标签: php laravel laravel-5

目前,我可以通过将其注入我想要使用的方法中来获取控制器中的路径。

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Route;

class HomeController extends Controller
{
    public function getIndex(Route $route)
    {
        echo $route->getActionName();
    }
}

但是,我尝试在中间件中执行类似的操作,但无法实现。

<?php namespace App\Http\Middleware;

use Closure;
use Illuminate\Routing\Route;
use Illuminate\Contracts\Routing\Middleware;

class SetView implements Middleware {

    protected $route;

    public function __construct(Route $route)
    {
        $this->route = $route;
    }

    public function handle($request, Closure $next)
    {
        echo $this->route->getActionName();

        return $next($request);
    }
}

收到错误。

Unresolvable dependency resolving [Parameter #0 [ <required> $methods ]] in class Illuminate\Routing\Route

不确定该如何处理。如果它不是路线,请不要关心,但需要以某种方式获取该动作名称。

2 个答案:

答案 0 :(得分:11)

删除你的构造函数/把它设置为默认值;

public function __construct(){}

尝试通过句柄方法访问路线,如此;

 $request->route();

所以你应该能够像这样访问动作名称;

 $request->route()->getActionName();

如果路由返回为null,请确保已在App / Http / Kernel.php中注册了中间件,如此;

protected $middleware = [
    ...
    'Path\To\Middleware',
];

上述内容适用于全球中间件

对于特定于路由的过滤,将'Path\To\Middleware',放在App\Providers文件夹中的RouteServiceProvider.php中的中间件数组中。

您还可以通过app()->router->getCurrentRoute()访问路线对象。

修改

您可以尝试以下方法;

$route = Route::getRoutes()->match($request);
$route->getActionName();

这从RouteCollection获取路线。请务必将其封装在try catch中,因为这会抛出NotFoundHttpException

答案 1 :(得分:4)

对于Laravel 5.1.x

在您的全球中间件

use Illuminate\Support\Facades\Route;

$route = Route::getRoutes()->match($request);
$currentroute = $route->getName();