Ily*_*hin 216 php routing symfony symfony-routing
如何在Symfony 2中获取当前路线?
例如,routing.yml:
somePage:
   pattern: /page/
   defaults: { _controller: "AcmeBundle:Test:index" }
我怎样才能获得这个somePage价值?
小智 313
从ContainerAware(像控制器)的东西:
$request = $this->container->get('request');
$routeName = $request->get('_route');
Mat*_*ieu 189
用树枝: {{ app.request.attributes.get('_route') }}
小智 47
我认为这是最简单的方法:
class MyController extends Controller
{
    public function myAction($_route)
    {
        var_dump($_route);
    }
    .....
jsg*_*pil 27
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) { ... }
K. *_*ert 19
没有适用于所有用例的解决方案.如果您使用$ request-> get('_ route')方法或其变体,对于发生转发的情况,它将返回'_internal'.
如果您需要一个甚至可以转发的解决方案,您必须使用到达2.4的新RequestStack服务,但这将打破ESI支持:
$requestStack = $container->get('request_stack');
$masterRequest = $requestStack->getMasterRequest(); // this is the call that breaks ESI
if ($masterRequest) {
    echo $masterRequest->attributes->get('_route');
}
如果您需要在模板中使用它,可以使用此扩展枝条.
Tom*_*oms 11
_route不是要走的路,也不是.根据创建Symfony的Fabien,它总是用于调试目的.它是不可靠的,因为它不能用于转发和其他直接调用控制器之类的东西,如部分渲染.
您需要在控制器中注入路径名称作为参数,请参阅此处的文档
另外,$request->get('');如果你不需要灵活性,请不要使用它比使用你需要的特定属性包(属性,查询或请求)慢得多,所以$request->attributes->get('_route');在这种情况下.