Crea sito

Un framework php MVC semplicissimo: php-easyMVC

Share

Ciao a tutti, oggi vi voglio presentare per la prima volta un tool sviluppato da me, si tratta di un semplicissimo e leggerissimo framework php utile allo sviluppo rapido di applicazioni web, che utilizza il (comodissimo a mio avviso) pattern di programmazione MVC, si chiama php-easyMVC.

Logo php-easyMVC Framework

Di cosa si tratta?

Potete pensare a un framework come ad una libreria, un’ambiente che costituisce lo “scheletro” delle vostre applicazioni o siti web, esso vi fornisce un struttura logica su cui lavorare separando in maniera netta ciò che è design da ciò che invece è tutto ciò che in background fa funzionare la vostra applicazione: accesso al database, scrittura su file, gestione dei dati, ecc. ecc. Inoltre, e forse cosa ancora più importante, vi fornisce una serie di funzionalità (solitamente tramite API) per semplificare notevolmente l’esecuzione di alcune operazioni e rendendo anche più facile il porting della vostra applicazione da un ambiente ad un altro, vi faccio un esempio:

Immaginate di aver scritto tutta la vostra applicazione, facendo un uso massiccio del database MySql, e  un bel giorno decidete di passare a PostgreSQL, scrivendo la vostra applicazione normalmente dovreste praticamente l’intera “businness logic” della vostra applicazione! Un framework vi fornisce un livello d’astrazione tale per cui vi è sufficiente selezionare il dbms che preferite (o se non è presente, specificare, implementando una semplice interfaccia, come il DBMS esegue certe operazioni) ed il gioco è fatto!

Il Pattern MVC (Model View Controller)

Vale la pena spendere due parole in più sul pattern MVC, in quanto è proprio l’interesse verso questo pattern che mi ha spinto a creare un framework mio, date un occhiata a questa figura, gentilmente concessaci da Wikipedia :)

MVCCome potete vedere, abbiamo tre componenti principali:

  • Il Modello (La M di MVC) contiene tutto il codice necessario alla gestione di quella che in gergo si chiama “Businness Logic”, ovvero tutto il codice che ad esempio vi serve per accedere al database, manipolare file, gestire gli uploads eccetera eccetera.
  • La Vista (La V di MVC) contiene invece tutto il codice che costituirà ciò che l’utente vede, nel nostro caso si tratterà sostanzialmente di pagine HTML.
  • Il Controller (La C di MVC) contiene il codice che si occupa di fare da intermediario tra la vista e il modello. Esempio banale:
    • L’utente preme su un pulsante (sulla vista)
    • Il controller rileva che è successo qualcosa alla vista, e gestisce la richiesta dell’utente, come? chiede al modello di recuperare ad esempio delle informazioni da un database.
    • Il modello fa ciò che gli viene chiesto dal controller, recupera i dati e aggiorna la vista, che a questo punto presenterà i dati richiesti all’utente.

Il Procedimento è concettualmente molto semplice, ma perché è utile? E perché dovrebbe velocizzare il mio lavoro?

è utile perché:

  • Il vostro codice è meglio organizzato e più leggibile (tutto sta dove deve stare, per trovare il codice che mi gestisce l’upload del file, non devo andare a cercare in mezzo al codice che mi disegna il form html!!!)
  • Si riesce ad avere un livello di modularità del codice molto molto alto, per cui in caso di aggiornamenti, non dovrete stare a riscrivere mezzo programma per implementare una funzionalità in più, o modificarne una esistente
  • Dunque abbiamo un più alto livello di manutenibilità.

rende il lavoro più veloce perché:

  • Perché potrete concentrarvi su un settore per volta della vostra applicazione: occuparvi della businness logic, poi della grafica, poi del design
  • è più facile lavorare in team, perché ognuno può lavorare indipendentemente su una parte dell’applicazione, e non ci si da “fastidio a vicenda”: chi disegna la vista, deve semplicemente sapere che se ho bisogno di un certo dato, devo parlare con un certo controller, senza bisogno di sapere altro, sarà poi compito di chi programma il controller e il modello farmi avere quel dato!

OK! Ma di framework ne esistono già tanti! Perché farne un altro?

Effettivamente di framework di questo tipo ce ne sono tanti, per citarne un paio: Symfony e CakePHP, si tratta in entrambi i casi, di framework avanzatissimi e potentissimi, con cui si possono fare grandi lavori, se avete “qualcosa di grosso” in ballo, allora vi conviene usare questi senza dubbio!

Il loro problema a mio avviso è la loro stessa potenza! Per applicazioncine come un blog reader, o un piccolo sito web personale, usare uno di questi framework è un po’ come usare un cannone per ammazzare una mosca!

Inoltre è necessario imparare ad usarli: per quanto ben documentati e supportati, questi framework vi obbligano a imparare linguaggi di templating, accedere ai dati utilizzando loro funzioni, ecc.

Quello che ho voluto fare io creando questo framework superleggero e super-semplice è stato offrirvi semplicemente uno schema da cui partire (seguendo il pattern MVC) senza costringervi a imparare nulla di nuovo, (le viste le scriverete sostanzialmente sempre in html e css con magari un po’ di php incluso per utilizzare qualche funzionalità tipo l’esecuzione di un modulo, o la stampa di una variabile).

Fornendovi le basi per accedere facilmente ai vostri database, e facilitandovi la creazione di moduli riutilizzabili più volte nella vostra applicazione! (Ad esempio, se scrivete un modulo contenente un menu da visualizzare in ogni pagina, per visualizzarlo sarà sufficiente scrivere nella vostra vista:

$modules->execute('menu');

abbastanza semplice no?

Conclusioni

Vi linko qui sotto il mio repository su github da cui potete scaricare la versione Alpha del framework, nel readme è presente una sorta di documentazione di base (in lingua inglese), in cui è spiegata anche la procedura di installazione, e i prerequisiti necessari al vostro server web per farlo funzionare.

php-easyMVC Framework

Il framework è rilasciato secondo la licenza GPL-V3 per cui siete liberi di prenderlo, modificarlo, ridistribuirlo, farne ciò che volete.

A breve, se siete interessati, pensavo di preparare una breve serie di tutorial su come realizzare un blog usando il framework. In modo da farvi apprezzare nel dettaglio le potenzialità di questo strumento.

Commentate dicendomi che ne pensate, a presto!

5 Responses to Un framework php MVC semplicissimo: php-easyMVC

  1. Adrian marzo 6, 2013 at 3:25 pm #

    Ciao,

    Stavo provando php-easyMVC Framework e avrei qualche domanda:

    Se io volessi fare un modulo, ad esempio “News”, non ho capito
    -perchè devo fare un controller nella cartella controller e uno nella cartella “modules/news”, cioè per creare il modulo “news” devo fare un controller chiamato “newsController.php” in “controller” e uno in “modules/news” chiamato sempre “newsController.php” ?

    -come viene eseguita la action passata come parametro (?rt=controllerName/actionName) perchè nel file router.class.php (le righe 86, 87)

    Grazie,
    Adrian

  2. Adrian marzo 6, 2013 at 3:51 pm #

    Forse ho capito…in router.class.php alla riga 59 viene chiamata la action che arriva nella querystring.
    Va bene così.

    • Jacopo marzo 6, 2013 at 5:27 pm #

      Ciao, mi fa piacere che tu stia provando il framework!

      Allora provo a rispondere rapidamente alle tue domande, anzi a dire il vero a una ti sei risposto da solo, la action viene chiamata esattamente in quel punto del router, tu in sostanza tramite URL specifichi prima il controller da inizializzare, e dopo lo ‘/’ il metodo del controller da chiamare, il router fa il parsing del tuo url crea un istanza del controller che hai richiesto, e prova a chiamare il metodo specificato, se non specifichi nulla, di default lui chiama index() che da specifiche deve per forza essere implementato da qualunque classe che estende baseController…

      per quanto riguarda la prima domanda che mi avevi fatto, io scrivendo il framework, ho pensato al modulo come a una parte della pagina che stai creando, che vuoi poi in seguito richiamare in altre pagine senza dover “copiare il codice” ogni volta, per cui vedi il modulo come un componente a se stante un modulo MVC dentro all’ applicazione MVC… per tanto, per rispondere alla tua domanda, se il tuo scopo finale è creare una pagina “news” nel tuo sito, quello che devi fare è creare un newsController nella cartella controller che estenderà baseController, che quindi implementerà il metodo index il quale si occuperà ad esempio di:
      - comunicare con un modello che chiamerai ad esempio news_model.class.php e che salverai nella cartella models
      - il modello recupererà le notizie che ne so da un database…
      - il newsController passerà i dati recuperati dal modello a una vista, che chiamerai ad esempio news.php e che salverai in views…

      per tanto, sempre per come ho pensato io il framework, non dovrai creare nessun modulo in modules per la tua pagina news,
      in quale caso allora dovrai usare il modulo?

      beh metti ad esempio di voler utilizzare nella tua pagina news un bel menu dinamico che sfrutta javascript e jquery per la grafica e che ad esempio recupera da un database l’elenco delle categorie delle notizie al momento presenti sul tuo sito, e che questo menu tu lo voglia ad esempio utilizzare in altre parti del tuo sito come, che ne so l’home page, allora potrai creare un modulo, ad esempio “categoriesMenu” dentro una sotto-cartella all’interno della cartella modules nel quale creerai un categoriesMenuController.php che si occuperà di gestire solo e unicamente quel modulo.

      una volta pronto il modulo, ti sarà sufficiente richiamare
      $modules->execute(categoriesMenu) da una qualsiasi vista del tuo sito, per visualizzare il tuo menu!

      inoltre considera che al momento non è possibile passare esplicitamente parametri al modulo chiamato, a breve aggiungerò la possibilità di farlo, per cui butta un occhio ogni tanto su github!

      spero di esserti stato utile, e di non averti confuso troppo le idee, in caso tu abbia altre domande, non esitare a farmele, che ti aiuto volentieri!

  3. Alex88 giugno 11, 2013 at 3:11 pm #

    Salve,
    sto provando questo MVC, ma non riesco a far comunicare il controller con il modello.
    Ho creato un modello : prova_model.php dentro la cartella models con una funzione getNome.
    Ora, all’interno della funzione del controller come richiamo la funzione getNome del modello ??

    • Jacopo agosto 5, 2013 at 8:17 am #

      Ciao, scusa il ritardo nella risposta, ma mi era sfuggito il tuo commento, purtroppo con tutto lo spam che gira in rete sono costretto a mettere i commenti in approvazione, e qualcuno mi sfugge, in realtà il nome del file che ospita il modello deve seguire uno standard… ovvero ogni modello deve avere il suffisso .class.php dopo il nome…
      ovviamente il contenuto deve essere una class che ospita il modello… a questo punto ti basta all’interno del controller istanziare la classe che hai creato ad esempio:
      [php]$modello = new prova_model($registry);[/php] e a quel punto puoi usare $modello per richiamare i metodi della classe…

      se hai voglia, dai un occhiata a questa serie di tutorial che sto scrivendo, dovrebbe aiutarti a chiarire un po’ di dubbi… in caso di bisogno scrivi!

Lascia un Commento


*

Powered by WordPress. Designed by Woo Themes