Symfony 2相当于Symfony 1中的url_for()函数

symfony 2 equivalent for url_for() function in symfony 1

本文关键字:Symfony for 函数 url 相当于 中的      更新时间:2023-09-26

在Symfony 1中,我们可以访问模板页面中的操作,例如url_for('modulename/actionname'),而无需在routing.yml中写入任何内容。

这在Symfony2中是如何实现的?也就是说,我必须在没有指定路由的情况下访问一个分支中的多个操作。这在使用ajax时非常有用。

Thanks in advance

如果我正确理解你的问题,你问你如何通过传递模块名称和操作名称来生成url,而不是路由名称。对吗?

我不认为这在Symfony2中是可能的。如果你看一下Symfony'Component'Routing'Generator'UrlGenerator中的generate方法,你会发现它期望路由的名称作为第一个参数。此外,Symfony2本身不支持symfony 1所支持的通用路由(如下所示供参考)。

default_index:
  url:   /:module
  param: { action: index }
default:
  url:   /:module/:action/*

如果没有这些通用路由,你就不能简单地访问/myModule/myAction而不为它定义路由。不要忘记Symfony2现在使用捆绑包,这会使问题进一步复杂化。

所以对于你想要访问的任何操作,你都需要为它们编写路由。

为了实际生成url…
—控制器:$this->generateUrl($routeName);
-来自PHP模板:$view['router']->generate($routeName);
-从Twig模板:{{ path('_routeName') }}{{ url('_routeName') }}的绝对URL

除了Arms的话,这里有几个例子(带参数):

假设我们的路由是:

#routing.yml
acme_demo_page:
  path: /{page}.{_format}
  defaults:
    _controller:  AcmeDemoBundle:Page:index
我们将为这个路由生成URL,如下所示:

从任何控制器的动作:

$url = $view['router']->generate("acme_demo_page", array(
    "page" => "main",
    "_format" => "html",
));

从任何PHP模板:

$url = $this->generateUrl("acme_demo_page", array(
    "page" => "main",
    "_format" => "html",
));

从任何Twig模板:

<a href="{{ path('acme_demo_page', {page:'main', _format:'html'}) }}">Home</a>
<a href="{{ url('acme_demo_page', {page:'main', _format:'html'}) }}">Abs Home</a>


希望这对你有帮助。欢呼。