我使用流明开发了API应用程序。并用于访问权限控制。我想在中间件中获取当前路由。但是,我总是无效:
$route = $request->route();
我已经尝试使用routeMiddleware和dispatcher的Can I get current route information in middleware with Lumen?。但它仍然返回null。我怎样才能获得中间件的当前路线?
非常感谢..
答案 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
}