2011-11-04 20 views
6

W Symfony 1 możemy uzyskać dostęp do akcji na stronie szablonu, jak na przykład url_for('modulename/actionname'), bez pisania czegokolwiek w routing.yml.symfony 2 odpowiednik funkcji url_for() w symfony 1

jak to jest możliwe w Symfony2 ?, to znaczy, gdy muszę uzyskać dostęp do więcej niż jednej akcji w gałązce bez określania w routingu. Jest to przydatne podczas korzystania z ajax.

góry dzięki

Odpowiedz

3

Jeśli rozumiem pytanie poprawnie, pytasz jak można wygenerować URL przekazując nazwę modułu i nazwę działania, zamiast nazwy trasy. Czy to prawda?

Nie sądzę, że jest to możliwe w Symfony2. Jeśli spojrzysz na metodę generate w Symfony\Component\Routing\Generator\UrlGenerator zobaczysz, że spodziewa się nazwy trasy jako pierwszego parametru. Ponadto Symfony2 nie wspiera natywnych tras generowanych przez symfony 1 (pokazane poniżej w celach informacyjnych).

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

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

Bez tych ogólnych tras, nie można po prostu uzyskać dostępu do/myModule/myAction bez faktycznego zdefiniowania dla niego trasy. I nie zapominaj, że Symfony2 używa teraz pakietów, co komplikowałoby to dalej.

Tak więc, niezależnie od czynności, do których chcesz uzyskać dostęp, musisz wpisać dla nich trasę.

Aby faktycznie generuje adresy URL ...
- Od regulatora: $this->generateUrl($routeName);
- od szablonu PHP: $view['router']->generate($routeName);
- od szablonu Twig: {{ path('_routeName') }} lub {{ url('_routeName') }} do absolutnego URL

+0

Dziękuję za wspaniałą odpowiedź. –

1

Dodatkowo do Arms' words, oto kilka przykładów (z parametrami):

Powiedzmy nasz routingu:

#routing.yml 
acme_demo_page: 
    path: /{page}.{_format} 
    defaults: 
    _controller: AcmeDemoBundle:Page:index 

Będziemy generować URL dla tej trasy, co następuje:

Od działaniu żadnego sterownika:

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

Z dowolnego szablonu PHP:

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

Z dowolnego szablonu 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> 


Mam nadzieję, że to pomaga.
Pozdrawiam.