2010-11-18 5 views
6

Sto creando un semplice CRUD per l'aggiunta di collegamenti a una categoria. Ogni categoria ha un ID. Ho una visione che elenca tutti i link per una certa categoria. In questo punto di vista ho un link al componente aggiuntivo forma che è:Zend Framework URL View Helper aggiunge "id" per impostazione predefinita

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

Attualmente costruire quel link nella vista utilizzando la seguente sintassi.

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

ho che questo può essere fatto più pulita utilizzando l'URL View Helper.

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

Ma che mi dà il seguente URL

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

..che ha un "id/3" in più. Ho letto ma non ho compreso completamente il codice di Url View Helper. Come mai c'è un id/3 in più?

Grazie!

@Fge ha dato la risposta corretta, sotto è la mia sintassi completo ed aggiornato.

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

C'è un parametro 'id' nella richiesta corrente? – Fge

+1

Sì, ho una vista che elenca tutti i link per una certa categoria. Quel "certa categoria" ha un id, l'URL è http://example.com/category/view/id/3 –

risposta

9

Per impostazione predefinita l'URL ViewHelper fonde e sovrascrive i parametri indicati con i parametri richiesta corrente. Come nel tuo caso il parametro id. Se si desidera ripristinare tutti i parametri è necessario utilizzare il 3 ° parametro della viewhelper: 'reset':

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

questo costringerà il viewhelper di non usare la richiesta di corrente come "ripiego" per i parametri non impostati . Il comportamento predefinito è particolarmente utile se si desidera solo cambiare uno o due parametri della richiesta corrente (come l'azione), ma non si desidera impostare tutti i parametri (o forse non addirittura li conoscete tutti).

+0

Grazie! Modificherò la mia domanda per aggiungere la sintassi completa che ho usato per ottenere l'URL che volevo. Non pensi che questo sia un comportamento tipo di strano per essere il default? –

+0

Nessun comportamento è perfetto. Questo riduce la sintassi per molti usi. Immagina di avere una lista ordinabile sul lato server con impaginazione. Per la pagina e le intestazioni ordinabili devi solo usare $ this-> url ('order' => 'ASC'); per cambiare l'ordine. Tutti gli altri parametri come pagina, filtri ecc ... rimarranno intatti. Non devi preoccupartene affatto a tuo avviso :) – Fge

+0

Questo è il perfetto caso d'uso per questo! –