目前,我可以通过将其注入我想要使用的方法中来获取控制器中的路径。
<?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
不确定该如何处理。如果它不是路线,请不要关心,但需要以某种方式获取该动作名称。
答案 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();