如何在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值?
当前回答
对于任何需要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.
?>
其他回答
Symfony 2.0 - -2.1 用这个:
$router = $this->get("router");
$route = $router->match($this->getRequest()->getPathInfo());
var_dump($route['_route']);
这个不会给你_internal。
针对Symfony 2.2+的更新:启动Symfony 2.2+时无法正常工作。我打开了一个漏洞,答案是“故意的”。如果希望在子操作中获取路由,则必须将其作为参数传入
{{ render(controller('YourBundle:Menu:menu', { '_locale': app.request.locale, 'route': app.request.attributes.get('_route') } )) }}
你的控制器:
public function menuAction($route) { ... }
$request->attributes->get('_route');
您可以从控制器内的请求对象中获取路由名称。
使用Twig: {{app.request.attributes.get('_route')}}
我从中得到的只是 _internal
我用$this->getRequest()->get('_route')从控制器内部获得路由名称。 甚至代码tuxedo25也建议返回_internal
这段代码是在Symfony 1.X中所谓的“组件”中执行的;不是页面的控制器,而是页面的一部分,需要一些逻辑。
Symfony 1中的等效代码。X是:sfContext::getInstance()->getRouting()->getCurrentRouteName();
我认为这是最简单的方法:
class MyController extends Controller
{
public function myAction($_route)
{
var_dump($_route);
}
.....