Qual è la differenza tra reindirizzamento e inoltro nel framework Zend

Qual è la differenza tra reindirizzamento e inoltro nel framework Zend?

Quando dovremmo usare il reindirizzamento e quando dovremmo usare in avanti?

_forward() inoltra tutto a un'altra azione del controller, mentre _redirect() invia un'intestazione, ovvero crea una nuova richiesta HTTP e passa attraverso l'integer process di invio con essa.

Ad esempio, se richiami http://example.com/foo/bar chiamerai il command foo e l'azione della bar . Se avanzi all'interno dell'azione della bar all'azione baz , ad esempio all'interno della stessa richiesta, il browser si troverà ancora sullo stesso URL, mentre quando esegui un reindirizzamento, ZF ordina al browser di caricare http://example.com/ foo / baz .

In sostanza, _forward()

 $request->setActionName($action) ->setDispatched(false); 

mentre _redirect()

 $this->_helper->redirector->gotoUrl($url, $options); 

Di solito faccio reindirizzamenti quando voglio evitare di ricaricare una pagina con conseguente riproduzione dei dati dei moduli.

Vedi questi:

Immagina di ricevere una telefonata in ufficio. Qualcuno vuole parlare con le vendite. Se si dice "si prega di call 123456" e riagganciare, questo è redirect . Se dici "aspetta un minuto" e trasferisci semplicemente la chiamata a loro, questo è avanti . 😉

Utilizzerai _forward () per i casi in cui desideri che l'URL rimanga invariato, anche se attenzione , vuol dire che qualsiasi class di controller di base utilizzata viene chiamata due volte.

Questo può sembrare ovvio o banale, ma se non viene tenuto a mente, può davvero rovinare la progettazione dell'applicazione, dato che la comprensione intuitiva del stream è che una richiesta chiama un'istanza del controller. Ad esempio vuol dire che i singleton della scope di richiesta devono essere dichiarati come static o _forward () li interromperà.

Direi che un reindirizzamento invia un 301/302 al browser con un nuovo URL, mentre un forward semplicemente "inoltra" la richiesta a un'altra azione del controller internamente ma mantiene l'URL lo stesso in modo che il browser non conosca alcuno .

1-redirect crea una nuova risposta con l'informazione header () [302 Found o 301 == Moved permanent] e il suo ciclo di invio tornerà ad essere

2-forward modifica il stream di esecuzione a quella nuova richiesta senza reinserire nuovamente il process di invio

L'azione di reindirizzamento termina il process di pagina corrente e reindirizza a un altro. Tutto il context cambierà (nuovo controller / azione) mentre il browser riceve un reindirizzamento. Si connette a un nuovo URL

Mentre l'avanti rimarrà sulla stessa pagina, ma lascerà il context invariato. Puoi vederlo come una chiamata di function. Le tue visualizzazioni verranno caricate come al solito.