如何在运行时获取 Symfony2 中的路由名称,当使用 yaml 路由描述时


How to get at runtime the route name in Symfony2 when using the yaml routes description?

在这里你可以找到我在Symfony2上的第n个问题。

我正在使用使用routing.yml文件中提供的路由名称的分页包。从我的角度来看,这种方法并不灵活,会导致脏代码,因为如果我更改路由的名称,那么我必须查看所有 Twig 模板或 PHP 文件来更新路由名称。这对于小型 Web 应用程序来说是可以的,但对于较大的应用程序会提供这样的错误,并且还需要给开发人员带来很高的负担。

所以,我想将字符串变量 x 传递给上面提到的捆绑包提供的Pager对象。字符串 x 应在控制器中初始化,并且必须提供所需的路由名称,如routing.yml文件中给出的那样。

我举个例子。路由文件如下:

//routing.yml
 AcmeTestBundle_listall:
pattern:  /test/page/{page}
defaults: { _controller: AcmeTestBundle:List:listall, page: 1 }
requirements:
    page:  'd+   

那么相关的控制器是:

//use something....
class ListController extends Controller
{
  public function exampleAction($page)
  {
    $array = range(1, 100);
    $adapter = new ArrayAdapter($array);
    $pager = new Pager($adapter, array('page' => $page, 'limit' => 25));
    return array('pager' => $pager);  
  }
}

然后,在树枝模板中,$pager接收引用上述捆绑包的路由名称

{% if pager.isPaginable %}
   {{ paginate(pager, 'AcmeTestBundle_listall') }}
{% endif %}
{% for item in pager.getResults %}
   <p>{{ item }}</p>
{% endfor %}

知道如何在运行时在控制器内部获取"AcmeTestBundle_listall"字符串值吗?

您可以使用

twig 中可用的 app 全局变量从请求中获取当前路由。

{% if pager.isPaginable %}
   {{ paginate(pager, app.request.get('_route') }}
{% endif %}

更多关于app这里和这里。