2009-05-29 23 views

risposta

35

In alcuni casi, l'esecuzione dell'azione termina richiedendo una nuova esecuzione dell'azione. Ad esempio, un'azione che gestisce l'invio di un modulo in una richiesta POST di solito reindirizza a un'altra azione dopo aver aggiornato il database. Un altro esempio è un alias di azione: l'azione indice è spesso un modo per visualizzare un elenco e in effetti è in avanti per un'azione di elenco.

La classe action fornisce due metodi per eseguire un'altra azione:

Se l'azione inoltra la chiamata ad un'altra azione:

$this->forward('otherModule', 'index'); 

Se l'azione termina con una redirezione web:

$this->redirect('otherModule/index'); 
$this->redirect('http://www.google.com/'); 

La scelta tra un reindirizzamento o un avanti è a volte difficile. Per scegliere la soluzione migliore, tenere presente che un forward è interno all'applicazione e trasparente per l'utente. Per quanto riguarda l'utente, l'URL visualizzato è uguale a quello richiesto. Al contrario, un reindirizzamento è un messaggio per il browser dell'utente, che comporta una nuova richiesta da parte sua e una modifica dell'URL risultante finale.

Se l'azione viene chiamata da un modulo inviato con method="post", è necessario eseguire sempre un reindirizzamento. Il vantaggio principale è che se l'utente aggiorna la pagina risultante, il modulo non verrà nuovamente inviato; inoltre, il pulsante Indietro funziona come previsto visualizzando il modulo e non un avviso che chiede all'utente se desidera inviare nuovamente una richiesta POST.

+0

Grazie, soprattutto per l'ultimo punto. –

+0

Questo è il testo originale di [Symfony Docu] (http://www.symfony-project.org/book/1_0/06-Inside-the-Controller-Layer#chapter_06_sub_skipping_to_another_action), dovresti aver chiamato almeno la tua fonte! @ e-satis – domi27

+0

perché mi stai facendo il ping @ domi27? –

Problemi correlati