控制器中的Symfony 5路由名称



如何在Symfony 5中的控制器中获得当前路由的名称?当我尝试这个时,我得到空:

$this->Request = Request::createFromGlobals();
$route = $this->Request->attributes->get('_route');
var_dump($route);

不建议在控制器内创建请求。获得已创建请求的首选方式是DI和自动布线:

// src/Controller/BlogController.php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentRoutingAnnotationRoute;
class BlogController extends AbstractController
{
/**
* @Route("/blog", name="blog_list")
*/
public function list(Request $request)
{
$routeName = $request->attributes->get('_route');
$routeParameters = $request->attributes->get('_route_params');
var_dump($routeName);
}
}

此请求由Symfony HttpKernel处理,并填充附加信息。

更多信息:https://symfony.com/doc/current/routing.html#getting-路线名称和参数

它是如何到达那里的:https://github.com/symfony/symfony/blob/b2609c4bae69ca383b97cb520da2ed9be1c48449/src/Symfony/Component/Routing/Matcher/UrlMatcher.php#L217

在这里找到了答案:

只需添加RequestStack作为函数参数并调用RequestStack->getCurrentRequest()->get('_route');

use SymfonyComponentHttpFoundationRequestStack;
public function yourCalledFunction(Utilities $u, RequestStack $requestStack) {
$route = $requestStack->getCurrentRequest()->get('_route');
}

最新更新