2011-11-04 53 views
6

在Symfony 1中,我們可以在模板頁面中訪問一個動作,例如url_for('modulename/actionname'),而不用在routing.yml中寫任何東西。symfony中的url_for()函數的symfony 2等效1

如何在Symfony2的?這是可能的,也就是說,如果我有一個樹枝訪問多於一個動作沒有routing.this指定在使用AJAX是非常有用的。

在此先感謝

回答

3

如果我正確理解你的問題,你問如何你可以通過一個模塊名稱和動作名稱產生的,而不是路由名稱的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現在使用bundle,這會進一步複雜化。因此,對於您要訪問的任何行動

,你需要編寫路由他們。

爲了實際生成的網址...
- 從控制器:$this->generateUrl($routeName);
- 從PHP模板:$view['router']->generate($routeName);
- 從細枝模板:{{ path('_routeName') }}{{ url('_routeName') }}了絕對URL

+0

感謝您u'r偉大的答案。 –

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", 
)); 

從任何的樹枝模板:

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


希望它有幫助。
乾杯。