如何在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 UPGRADE,而不是调用get('_route')。
public function indexAction(Request $request)
{
$routeName = $request->get('_route');
}
如果你想在twig中获取路由名,你必须像这样
{{ app.request.attributes.get('_route') }}
其他回答
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) { ... }
我认为这是最简单的方法:
class MyController extends Controller
{
public function myAction($_route)
{
var_dump($_route);
}
.....
来自ContainerAware(比如控制器):
$request = $this->container->get('request');
$routeName = $request->get('_route');
$request->attributes->get('_route');
您可以从控制器内的请求对象中获取路由名称。
_route不是我们要走的路,从来都不是。根据创建Symfony的Fabien的说法,它总是用于调试目的。它是不可靠的,因为它不能用于转发和其他对控制器的直接调用,如部分呈现。
你需要在你的控制器中注入你的路由名作为参数,请看这里的文档
另外,请永远不要使用$request->get(");如果你不需要灵活性,它比使用特定的属性包,你需要(属性,查询或请求)慢得多,所以$request->属性->get('_route');在这种情况下。