symfony 2等效于symfony 1中的url_for()函数

时间:2011-11-04 07:16:12

标签: javascript ajax jquery symfony

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

如何在Symfony2中实现这一点?,即如果我必须在twigig中访问多个操作而不指定routing.this在使用ajax时很有用。

提前致谢

2 个答案:

答案 0 :(得分:3)

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

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

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

default:
  url:   /:module/:action/*

如果没有这些通用路由,您不能简单地访问/ myModule / myAction而不实际为其定义路由。并且不要忘记Symfony2现在使用捆绑包,这将进一步复杂化。

因此,无论您想要访问哪些操作,都需要为它们编写路线。

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

答案 1 :(得分:1)

除了Arms' words之外,这里有一些例子(带参数):

假设我们的路由是:

#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>


希望它有所帮助。
欢呼声。