Rob*_*Rob 9 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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我试图在中间件中执行类似的操作,但无法实现.
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
得到一个错误.
Unresolvable dependency resolving [Parameter #0 [ <required> $methods ]] in class Illuminate\Routing\Route
Run Code Online (Sandbox Code Playgroud)
不确定该怎么做.不管它是否是一条路线都不在乎,但需要以某种方式获得该动作名称.
Mat*_*row 14
删除你的构造函数/把它设置为默认值;
public function __construct(){}
Run Code Online (Sandbox Code Playgroud)
尝试通过handle方法访问路由,如此;
$request->route();
Run Code Online (Sandbox Code Playgroud)
所以你应该能够像这样访问动作名称;
$request->route()->getActionName();
Run Code Online (Sandbox Code Playgroud)
如果路由返回为null,请确保已在App/Http/Kernel.php中注册了中间件,如此;
protected $middleware = [
...
'Path\To\Middleware',
];
Run Code Online (Sandbox Code Playgroud)
以上是针对全球中间件的
对于特定于路由的过滤,'Path\To\Middleware',将中间件数组放在App\Providers文件夹中的RouteServiceProvider.php中.
您还可以通过访问路径对象app()->router->getCurrentRoute().
编辑:
您可以尝试以下方法;
$route = Route::getRoutes()->match($request);
$route->getActionName();
Run Code Online (Sandbox Code Playgroud)
这从路上得到了路线RouteCollection.一定要将它封装在try catch中,因为这会抛出一个NotFoundHttpException.
对于Laravel 5.1.x
在您的全球中间件中
use Illuminate\Support\Facades\Route;
$route = Route::getRoutes()->match($request);
$currentroute = $route->getName();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15145 次 |
| 最近记录: |