如何在Symfony 2中获取当前路由?
例如routing.yml:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
如何获得这个somePage值?
如何在Symfony 2中获取当前路由?
例如routing.yml:
somePage:
pattern: /page/
defaults: { _controller: "AcmeBundle:Test:index" }
如何获得这个somePage值?
当前回答
$request->attributes->get('_route');
您可以从控制器内的请求对象中获取路由名称。
其他回答
不存在适用于所有用例的解决方案。如果您使用$request->get('_route')方法或其变体,它将返回'_internal'用于转发发生的情况。
如果你需要一个解决方案,即使转发,你必须使用新的RequestStack服务,在2.4到达,但这将打破ESI支持:
$requestStack = $container->get('request_stack');
$masterRequest = $requestStack->getMasterRequest(); // this is the call that breaks ESI
if ($masterRequest) {
echo $masterRequest->attributes->get('_route');
}
如果你在模板中需要它,你可以用它来做一个树枝扩展。
使用Symfony 4.2.7,我能够在我的树枝模板中实现以下内容,它显示了我在控制器中定义的自定义路由名。
在index.html.twig
<div class="col">
{% set current_path = app.request.get('_route') %}
{{ current_path }}
</div>
在控制器中
...
class ArticleController extends AbstractController {
/**
* @Route("/", name="article_list")
* @Method({"GET"})
*/
public function index() {
...
}
...
}
结果将“article_list”打印到浏览器中的所需页面。
如果你想在你的控制器中获取路由名,那么你必须注入请求(而不是从容器中获取,因为Symfony UPGRADE,而不是调用get('_route')。
public function indexAction(Request $request)
{
$routeName = $request->get('_route');
}
如果你想在twig中获取路由名,你必须像这样
{{ app.request.attributes.get('_route') }}
我认为这是最简单的方法:
class MyController extends Controller
{
public function myAction($_route)
{
var_dump($_route);
}
.....
对于任何需要Symfony 3当前路由的人,这是我使用的
<?php
$request = $this->container->get('router.request_context');
//Assuming you are on user registration page like https://www.yoursite.com/user/registration
$scheme = $request->getScheme(); //This will return https
$host = $request->getHost(); // This will return www.yoursite.com
$route = $request->getPathInfo(); // This will return user/registration(don't forget this is registrationAction in userController
$name = $request->get('_route'); // This will return the name.
?>