2009-12-28 3 views
5

Sto imparando il pattern MVC PHP per l'implementazione del mio back-end. Guardando a questo ottimo esempio:POST in PHP Controller MVC?

Implementazione MVC in PHP: Il controller

http://onlamp.com/pub/a/php/2005/11/03/mvc_controller.html

mi sento bene con il flusso di esecuzione in un GET. Ma non si parla di cosa succede in un POST. Quale sarebbe il tipico codice del controller per il POST? Mi chiedo se sto fraintendendo qualcosa di ovvio qui, dal momento che non riesco a trovare situazioni simili nei post SO precedenti o Google.

Ad esempio: un'app per la gestione delle persone, (nome, cognome, età) desidera aggiungere un record a db quando un POST colpisce il controller. Cosa succede dopo? La mia ipotesi è che la "vista" non sia usata affatto, o forse per conferma? Esiste solo una chiamata dal controller a una classe del modello che aggiunge un record a db? Oppure saltare il controller del tutto per un POST e passare direttamente a uno script "aggiungi record"?

Esiste qualche esempio disponibile?

Grazie in anticipo, Ari

risposta

4

Bene, il POST è praticamente lo stesso di GET, solo alcuni blocchi casuali di client di informazioni inviati al server. Quindi puoi trattarlo allo stesso modo.

Ho lavorato con il framework CodeIgniter MVC in PHP. Usa URI GET per instradare al controller e ai suoi metodi. Quando arriva la richiesta POST, tratta il suo URI allo stesso modo. Le azioni successive sono nella mano del programmatore, che accede ai dati di richiesta POST direttamente o tramite qualche wrapper, e può anche non usarlo affatto.

Devo dire che ti concentri sulle parti sbagliate. MVC non è il modello di tutto e non dice come trattare le richieste POST o GET. È solo un semplice principio noto molti anni prima che il nome "MVC" diventasse famoso come principio sulla divisione della logica, dei dati e della rappresentazione. E la maggior parte del software (dal vecchio al nuovo) in realtà fa questa suddivisione, perché è molto difficile non farlo nella maggior parte dei casi. In alcune app i bordi non sono così evidenti, alcuni addirittura non hanno un modello a oggetti. L'implementazione dell'app è sempre tua, perché MVC non ti dice cosa scrivere, ma fornisce solo alcuni indizi sull'organizzazione di livello più alto del tuo codice.

P.S. Scusa per il mio cattivo inglese.

+0

Grazie ragazzi .Segnalo male come risposta corretta dato che risponde alla mia domanda. Vorrei solo ricordare che ho già lavorato con MVC in un ambiente desktop, ma la parte POST mi ha confuso. Proverò a trattarlo come un GET. Saluti Ari – BeMeCollective

3

Tipicamente, il controllore avrebbe elaborare la richiesta (i processi del controller tutte le richieste), quindi chiamare nel modello di manipolare in realtà i dati in base alla richiesta, e poi o reindirizzare da qualche parte altrimenti (attivando una nuova richiesta GET) o richiamare una vista per generare una pagina risultante.

3

Bene, se hai intenzione di costruire la tua soluzione di pattern MVC, potresti fare una cosa complicata. Dato che gestisci MVC, devi avere un gestore di routing davvero affidabile. Così, dopo l'analisi l'URL e la definizione di quale controller/metodo che si suppone di innescare, si potrebbe fare qualcosa di simile:

<?php 
    ...; 
    $method_name = (count($_POST) > 0) ? "post_".$route_result : $route_result; 
    ...; 

e più tardi nella tua classe controller che si potrebbe fare qualcosa di simile:

<?php 
namespace Controllers; 

class MyController extends \System\Controller { 
    function my_method($whatever = null){ 
     ...; 
     return $this->view($model_or_whatever); // supposed that you prepared view Class in routes 
    } 

    function post_my_method($whatever = null){ 
     ...; 
     return $this->view($model_or_whatever); // supposed that you prepared view Class in routes 
    } 

} 
+11

Si prega di astenersi dall'utilizzare txtspeak qui. "u", "r" e "smth" non sono parole. – Charles

+2

Non si ripeterà la prossima volta, il mio inglese non è molto buono o mi sono appena abituato ad accorciare i miei messaggi –