2010-11-18 9 views
6

Estoy creando un CRUD simple para agregar enlaces a una categoría. Cada categoría tiene una identificación. Tengo una vista que enumera todos los enlaces para una categoría determinada. En vista de que tengo un vínculo con el complemento forma que es:Zend Framework Url View Helper agrega "id" de manera predeterminada

http://example.com/link/add/categoryId/3 

momento me construir ese vínculo en la vista utilizando la siguiente sintaxis.

<?php echo $this->baseUrl();?>/link/add/categoryId/<?php echo $this->category['id']; ?> 

I que esto se puede hacer más limpia mediante la dirección URL View Helper.

<?php echo $this->url(array('controller'=>'link','action'=>'add','categoryId'=>$this->category['id'])); ?> 

Pero eso me da la siguiente url

http://example.com/link/add/id/3/categoryId/3 

..which tiene un "id/3" extra. Leí pero no entendí completamente el código de Url View Helper. ¿Cómo es que hay un id/3 adicional allí?

Gracias!

@Fge dio la respuesta correcta, a continuación se muestra la sintaxis completa actualizada.

echo $this->url(array('controller'=>'link','action'=>'add','categoryId'=>$this->category['id']),null,true); 
+0

¿Hay algún parámetro 'id' en su solicitud actual? – Fge

+1

Sí, tengo una vista que enumera todos los enlaces para una categoría determinada. Esa "cierta categoría" tiene una identificación, la url es http://example.com/category/view/id/3 –

Respuesta

9

Por defecto, el Url ViewHelper funde y anula los parámetros dados con los parámetros de la petición actual. Como en tu caso, el parámetro id. Si desea restablecer todos los parámetros que hay que utilizar el parámetro de la tercera ViewHelper: 'reset':

$this->url(array(), 'route'(= null to use the default), true); 

Esto obligará al ViewHelper no utilizar la petición actual como "retroceso" para los parámetros no establecidos . El comportamiento predeterminado es especialmente útil si solo desea cambiar uno o dos parámetros de la solicitud actual (como la acción) pero no desea establecer todos los parámetros (o tal vez ni siquiera los conoce a todos).

+0

¡Gracias! Editaré mi pregunta para agregar la sintaxis completa que utilicé para obtener la URL que quería. ¿No crees que esto es un comportamiento extraño por ser el predeterminado? –

+0

No, el comportamiento es perfecto. Esto acorta la sintaxis para muchos usos. Imagine que tiene una lista ordenable del lado del servidor con paginación. Para el pageination y los encabezados ordenables solo tiene que usar $ this-> url ('order' => 'ASC'); para cambiar el orden Todos los demás parámetros como página, filtros, etc. permanecerán intactos. No tiene que preocuparse por ellos en absoluto en su vista :) – Fge

+0

¡Ese es el caso de uso perfecto para él! –