2011-11-04 23 views
6

En Symfony 1 podemos acceder a una acción en la página de la plantilla como por ejemplo url_for('modulename/actionname') sin escribir nada en routing.yml.symfony 2 equivalente para la función url_for() en symfony 1

¿Cómo es posible esto en Symfony2?, Es decir, si tengo que acceder a más de una acción en una rama sin especificar el enrutamiento. Esto es útil cuando se usa ajax.

Gracias de antemano

Respuesta

3

Si entiendo bien su pregunta, usted está preguntando cómo se puede generar una URL pasando un nombre de módulo y el nombre de la acción, en lugar de un nombre de ruta. ¿Está bien?

No creo que esto sea posible en Symfony2. Si echa un vistazo al método generate en Symfony\Component\Routing\Generator\UrlGenerator verá que espera el nombre de una ruta como el primer parámetro. Además, Symfony2 no admite de forma nativa las rutas genéricas que Symfony 1 hace (se muestra a continuación para referencia).

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

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

Sin estas rutas genéricas, no se puede simplemente acceder/mi_módulo/miAccion sin definir en realidad una vía para ello. Y no olvide que Symfony2 ahora usa paquetes, lo que complicaría aún más esto.

Por lo que para las acciones que desea acceder, tendrá que escribir rutas para ellas.

Con el fin de generar las direcciones URL en realidad ...
- A partir de un controlador: $this->generateUrl($routeName);
- A partir de una plantilla PHP: $view['router']->generate($routeName);
- A partir de una plantilla Twig: {{ path('_routeName') }} o {{ url('_routeName') }} de una URL absoluta

+0

Gracias por su gran respuesta. –

1

Adicionalmente a Arms' words, aquí hay algunos ejemplos (con parámetros):

digamos que nuestra ruta es:

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

Vamos a generar la dirección URL de esta ruta, de la siguiente manera:

De la acción de cualquier controlador:

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

De cualquier plantilla PHP:

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

De cualquier plantilla 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> 


espero que ayude.
Saludos.