Visualizzazione risultati 1 fino 2 di 2

Discussione: Esempio di struttura Mvc in PHP

  1. #1
    Guest

    Predefinito Esempio di struttura Mvc in PHP

    Ciao a tutti,
    Volevo convidere con la comunity un esempio di struttura Mvc in PHP, a me piace programmare e condividere con altri le idee e confrontarsi, sono sempre stato così quindi qualsiasi suggerimento o implementazione è sempre ben accetta e doverosa.Dato che ho il sito su altervista da anni voglio condividere con voi le mie idee.
    Per chi non lo sa Mvc è acronimo di Model, View, Controller, facciamola breve e arriviamo al nocciolo, l'utente si interfaccia solo con la view(vista), in parole semplici l'html(input di inserimento dati etc..) e la parte client del software, quando invia un comando che sia in submit o in Ajax(chiamata sincrona o asincrona) il comando viene sempre inviato ad una pagina di solito index.php, l'index invoca il controller(Controllore) che riceve la variabile la gestisce e la invia al model o la rigetta indietro, è importante notare che l'utente non fa "submit" o invio DIRETTAMENTE al file che si interfaccia con il DB ma lo fa sempre ad index.php, il motore al di sotto di index fa tutto il resto, una volta che il controller da il SUO ok la variabile viene inviata al model(modello) , ed è nel modello che ci sono le istruzioni che si interfacciano con il DB.In sintesi ed in parole povere il concetto è questo, l'utilità?
    Ordine, migliori performance, migliore mantenimento, possibilità di lavorare in blocchi, ogni blocco ha il suo compito, se il progetto si ingrandisce il mantenimento ed il debug online è immediato.
    Partendo da questo presupposto ho voluto creare una struttura che mi permettese di debuggare nel giro di 5 secondi ed avere sott'occhio in maniera ordinata tutto il progetto, quindi ho creato una semplice struttuira MVC in classi.
    Ovviamente è una mia personale interpretazione, niente di elevato o evoluto...
    Spiego il funzionamento:

    L' indice.php riceve la variabile azione (sempre) deve chiamarsi azione(così è impostata la struttura), a sua volta istanzia la classe controller e chiama il metodo invoke(nel file controllo.php all'interno della cartella controllo)..Invoca il controller una volta che ha azione=QUALCOSA, il controller a sua volta verifica che sia effettivamente azione la variabile trasmessa, altrimenti se viene trasmesso pippo=qualcosa risponde immediatamente alla view dicendo pagina non trovata se è stata trasmessa "azione" a sua volta la struttura fa un ulteriore smistamento, qui c'è il cuore dell'applicazione, ed il punto di partenza, il controller se azione è isset istanzia una classe "modello"(classe modello inclusa nella cartella model nel file modello.php) e dice invoco il metodo "controllaAzione", si nota che è un ulteriore controllo effettivamente, potrebbe essere fatto direttamente nel controller però non è solamente un controllo in più e vado a spiegare il perchè.
    Una volta che il modello riceve la variabile azione=qualcosa non solo controlla ma smista la chiamata se la variabile azione è valorizzata nel modo corretto, altrimenti risponde "Azione errata" o meglio azione valorizzata in modo errato, potremmo dire.
    Il modello istanzia la classe ajaxModel e tramite la funzione switchAzione recupera il valore di azione e dirotta al relativo metodo nel file ajaxModel, il file e la classe devono avere lo stesso nome, tutto avviene dinamicamente e la valorizzazione di azione ha lo stesso nome del metodo corrispettivo nella classe ajaxModel.
    ajaxModel è il cuore dell'aplicazione è dove si svuolge tutto il processo di interfacciamento con il DB.

    Quindi a struttura completata al programmatore non rimane altro che inserire una public funcion mioMetodo e richiamarla tramite una chiamata in get o post invocando index.php?azione=mioMetodo, vedrete infatti che nelle chiamate Ajax(ma anche in submit non cambierebbe nulla) azione ha lo stesso nome del metodo in ajaxModel, in poche parole questo

    Codice:
    		var azione = 'chiamata';
    		
    		$.ajax({
    		      type: "POST",
    		      url: "../indice.php",
    		      dataType: "html",
    		      data : {azione : azione},
    		      success:function(data){
                                alert(data);
    		      },
    		      error:function (){
    		        alert('Chiamata Fallita');
    		      }                        
    		});
    Vuol dire che invio ad indice.php azione=chiamata quindi basterà andare in ajaxModel creare un metdo public function chiamata ed il parse entrerà direttamente li dentro e risponderà al client.
    In termini di debug e di gestione è utilissimo secondo me, almeno io mi trovo da Dio, nell'esempio però ho incluso anche un secondo tipo di chiamata cioè se io ho bisogno di entrare in un metodo dove solo valorizzare due variabili azione nello stesso metodo ma se leggete il codice capirete l'utilizzo di call_user_func in chiamata2 una volta azione è dataNascita una volta è luogoNascita...e così via.
    Il progetto può essere ampliato e migliorato io condivido con voi la struttura sperando che possa essere di utilizzo, studio e condivisione tra tutti noi, non esitate a darmi suggerimenti, critiche, quello che volete.
    Ciao a tutti

    Potete scaricare la cartella "esempioMvc" nella mia pagina download in fondo (io uso Aptana Studio qualsiasi IDE usiate voi dovete lanciare viewEsempio.php )

    http://fractalcosmo.com/blog/download/

    Mentre le chiamate ed il risultato finale è visibile qui:

    http://fractalcosmo.altervista.org/e...iewEsempio.php

    Ovviamente i controlli delle input sono i minimi indispensabili...

  2. #2
    Guest

    Predefinito

    Mi sono dimenticato di dire una cosa, ma scrivo qui perchè se modifico il messaggio prima supero i 10000 caratteri, è interessante la funzione securityCall(), perchè?Facciamo un esempio come avviene spesso nel web io devo inserire la mia provincia di nascita, sapete che quando digitate la provincia da una input di solito c'è un autocomplete della provincia, non potete mettere provincia pippo, quindi ci sarà una tabella con tutte le provincie d'Italia o i comuni d'Italia...Qual'è il punto?
    Io faccio la mia applicazione invoco in ajaxModel recuperaComuni, ovviamente ajaxModel risponderà un Json che andrà poi a valorizzare la mia autocomplete, se un utente loggato malintenzionato vuole entrare nel ajaxModel nel metodo recuperaComuni invece di fare l'autocomplete dalla input potrebbe scrivere l'url esempio indice.php?azione=recuperaComuni e vedrebbe comunque tutto il json non è altro che il mio DB alla fine....Come ovviare a questa cosa?
    Ci sono tante soluzioni una di queste è proprio la security call, cioè se la chiamata arriva da Ajax è un http request andiamo avanti altrimenti blocchiamo l'utente malintenzionato che cerca di accedere al metodo direttamente dall'url...Se per esempio voi andate qui

    http://fractalcosmo.altervista.org/e...zione=chiamata

    Autorizzazione negate altrimenti leggereste comunque un print...incluso nel metodo chiamata in ajaxModel, si può aggiungere il checkLogin cioè controllare che solo gli utenti loggati abbiano effettivamente l'accesso alle pagine, ad esempio include un checkLogin in controller e basta...Poi fa tutto lui, perchè è tutto collegato...E così via...CIao

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •