Vengo da diversi framework MVC (ad esempio Symfony) a Magento. Ho letto molto sulle best practice di Magento e posso vedere che Magento non usa il tipico stile MVC. Alan tempesta ha scritto quanto segue:Magento - Il modo migliore per gestire i moduli in blocchi?
Non è la responsabilità del controllore per impostare le variabili per la vista [...] Il lavoro di controllo è quello di fare certe cose per modelle, e poi dire il sistema è il rendering di layout tempo.
Penso di capire questo approccio in quanto ciò può fornire una certa flessibilità per i blocchi.
Diritto. Ma per quanto riguarda le forme?
In un tipico framework MVC si ottengono i parametri di richiesta nel controller, si convalidano i dati del modulo nel controller, si effettuano le operazioni del modello (salvataggio, caricamento, ecc.) O i reindirizzamenti se necessario, e quando tutto è pulito e ordinato, fornirai i pezzi di uscita appena sfornati per la vista.
In Magento tutto ciò dovrebbe accadere all'interno di un blocco e il controller (sottile) dovrebbe solo preparare il layout e quindi renderlo. (Se capisco.)
Ho cercato di trovare un articolo (manuale, argomento del forum, qualsiasi cosa), che descrive le fasi di creazione di un modulo separato con un proprio nuovo modello, che può essere modificabile tramite un modulo nel frontend dall'utente. Mi piacerebbe vedere come un modulo personalizzato dovrebbe funzionare nel frontend. Ho trovato solo articoli generali su blocchi, moduli, modifiche o creazione di moduli adminhtml o personalizzazione di moduli di iscrizione a contatti o newsletter.
L'ho fatto. Funziona ora, ma non sono soddisfatto. Quindi, ho controllato il codice sorgente del modulo di contatto nel modulo principale, e quelli che hanno incasinato l'intera immagine per me. Il modulo di contatto integrato utilizza IndexController per la maggior parte delle operazioni sopra menzionate, (quasi) come un MVC standard.
Qualcuno potrebbe suggerirmi una buona pratica, come gestire un flusso semplice come il seguente? (Ho una soluzione per questi sotto, ma non sono sicuro, è il "giusto modo Magento"):
- Quando la pagina viene caricata, mostra un modulo in un blocco, che è incluso in la pagina separata
- carico un oggetto del modello dal DB da un parametro di richiesta
- dati dell'oggetto Popola nella forma
- Quando l'utente invia il form, i dati dei moduli di processo, li
- convalidare Se errore di validazione, mostrano la form di nuovo, e compare il messaggio di errore
- I f OK, memorizzare i dati nel DB, mostrare una pagina di ringraziamento
La mia confusione è principalmente attorno:
- Dove dovrei ottenere e gestire il parametro di richiesta? (L'ho fatto nel file di classe del blocco)
- E caricare un oggetto dal DB, in base ad esso? (Inoltre, e poi passato al phtml)
- Come passare alla vista, se non volessi caricarlo lì? (Vorrei sapere un modo, ma non conosco il modo migliore.)
- Dove devono essere elaborati, convalidati e archiviati i dati del modulo (POST)? (Block?)
- Come posso utilizzare correttamente i reindirizzamenti in un blocco? Ho bisogno di reindirizzamento, perché la pagina di ringraziamento dovrebbe essere un blocco/pagina diversa? O solo un aspetto alternativo (condizionale) dello stesso blocco?
Grazie Slayer, questo è quello che sospettavo. Sembra molto più sensato! Sono d'accordo con tutti i tuoi argomenti sopra. Ho assunto qualcosa di simile, basato sulla mia conoscenza MVC. Controllerò quei codici base. Molto apprezzato! –