2011-11-04 25 views
6

In Symfony 1 è possibile accedere a un'azione nella pagina modello come ad esempio url_for('modulename/actionname') senza scrivere nulla in routing.yml.symfony 2 equivalente per la funzione url_for() in symfony 1

come è possibile in Symfony2 ?, ovvero se devo accedere a più di un'azione in un ramoscello senza specificare nel routing.questo è utile durante l'utilizzo di ajax.

Grazie in anticipo

risposta

3

Se ho capito la tua domanda correttamente, si sta chiedendo come è possibile generare un URL passando un nome del modulo e nome di azione, invece di un nome percorso. È giusto?

Non credo sia possibile in Symfony2. Se dai un'occhiata al metodo generate in Symfony\Component\Routing\Generator\UrlGenerator vedrai che si aspetta che il nome di una rotta sia il primo parametro. Inoltre, Symfony2 non supporta in modo nativo i percorsi generici di symfony 1 (mostrati sotto per riferimento).

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

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

Senza questi percorsi generici, non si può semplicemente accedere a/mymodule/myAction senza in realtà la definizione di un percorso per esso. E non dimenticare che Symfony2 ora usa bundle, il che complicherebbe ulteriormente.

Quindi per qualsiasi azione si desideri accedere, è necessario scrivere percorsi per loro.

Al fine di generare in realtà gli URL ...
- Da un controller: $this->generateUrl($routeName);
- Da un modello di PHP: $view['router']->generate($routeName);
- Da un modello di Twig: {{ path('_routeName') }} o {{ url('_routeName') }} per un URL assoluto

+0

Grazie per la tua grande risposta. –

1

In aggiunta a Arms' words, qui ci sono alcuni esempi (con parametri):

Diciamo che il nostro percorso è:

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

Ci generare l'URL per questo percorso, come segue:

Da azione di qualsiasi controllore:

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

Da qualsiasi modello di PHP:

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

Da qualsiasi modello di 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> 


Speranza che aiuta.
Cheers.