In Questa Pagina
CakePHP ha tantissime funzionalità e verranno analizzate con calma negli articoli futuri di questo blog.
Qui ci focalizziamo su alcuni punti chiave che spesso passano inosservati al primo approccio con un nuovo framework. Ecco perché amiamo CakePHP rispetto ad altri Framework PHP (es: YII, Codeigniter, Zend, Kohana etc…).
Un po’ di storia di CakePHP
CakePHP nasce nel lontano 2005 portando un progetto ambizioso e senza uguali nel mondo dello sviluppo PHP.
Parliamo infatti di un progetto nato sotto la release 4 di PHP. Questo fa di CakePHP uno dei framework più vecchi e longevi del panorama di sviluppo PHP.
Le Convenzioni di CakePHP
È sempre stata la caratteristica del CakePHP: Utilizzare delle convenzioni forti per una creazione rapida e consistente dei progetti.
CakePHP è fortemente ispirato a Ruby on Rails e, come quest’ultimo, aderisce fortemente alla filosofia “convenzione anziché configurazione”
Questo consente a qualsiasi sviluppatore di occuparsi dello sviluppo applicazioni CakePHP al posto di pensare a “dove” mettere le cose.
Questi convenzioni così forti sono in netto contrasto con la filosofia liberale del linguaggio PHP. Ma grazie a questi paletti il framework assicura una consistenza elevata nello stile di sviluppo attraverso diversi Developer CakePHP e diversi Team CakePHP.
La consistenza e le convenzioni si estendono anche al Database.
Per velocizzare lo sviluppo il framework utilizza dei default nella nomenclatura dei file, classi, variabili, tabelle e campi.
Per esempio le tabelle devono essere nominate in plurale del modello (es: Moello “Article” tabella “articles”)
la primary key sarà sempre “id”
Le chiavi relazionate saranno il nome singolare della tabella relazionata (es: article per articles) seguito da “_id” (es: article_id).
Per fare un esempio breve vediamo i due modelli utilizzati sopra (Article e Comment).
Utilizzando questi due modelli CakePHP andrà a cercare la tabella “articles” per il modello Article e la tabella “comments” per il modello Comment.
Inoltre è a conoscenza del fatto che nella tabella comments sarà presente un campo “article_id“.
Ecco quindi le nostre due tabelle
Nelle tabelle abbiamo aggiunto il campo “title” per la tabella articles ed il campo “comment” per la tabella Comments. Questi due campi sono solo fittizi e servono solo per dare un senso di funzionamento dell’applicazione.
Queste sono le query per creare le tabelle
Infine vediamo come è possibile cambiare il campo utilizzato per le relazioni.
Con questa modifica CakePHP cercherà un campo “post_id” per le relazioni.
Naturalmente questa pratica è sconsigliata se non c’è una necessità in particolare.
Qui abbiamo utilizzato la relazione hasMany e belongsTo (uno a molti). Puoi approfondire l’argomento nella serie Tutorial Italiano Relazioni CakePHP.
Per ulteriori informazioni sulle convenzioni CakePHP vi rimando al nostro articolo approfondito.
Anche se molti developer php preferiscono più libertà con framework diversi e strumenti come Yii e CodeIgniter le convenzioni di CakePHP ci possono portare un vantaggio netto nello startup di un progetto CakePHP e nella manutenzione del codice. In particolare se il codice passa tra le mani di diversi team di sviluppo e Developer CakePHP le convenzioni ci aiuteranno a comprendere il progetto.
Supporto
CakePHP ha una comunità molto attiva e si può ottenere supporto ed informazioni in diverse maniere.
Attraverso il sito ufficiale, il bakery, irc, gruppi su googlegroups e stackoverflow si può ottenere un aiuto veloce. Su github troviamo invece molti plugin, component e behaviour per CakePHP.
Da non dimenticare naturalmente il nostro sito!
Scaffolding
Lo scaffolding è uno strumento utilissimo per testare le relazioni e l’interazione dei nostri dati.
Vediamo come utilizzarlo sfruttando i due modelli (article, comment) che abbiamo creato prima.
È sufficiente dichiarare la variabile pubblica $scaffold per attivare un sistema automatico di CRUD.
Visitando ora l’indirizzo /articles troveremo la nostra interfaccia pronta per testare il database.
ATTENZIONE
NON UTILIZZARE IN PRODUZIONE!Validazione
La validazione CakePHP è uno strumento eccellente.
Le validazioni vanno inserite nel Model. Vediamo un esempio utilizzando il modello Article.
In questo esempio rendiamo obbligatorio il campo “title” restituendo un messaggio in caso di errore “inserire un titolo”.
CakePHP si occuperà di eseguire il controllo ad ogni inserimento o modifica di un nuovo recorrd nella tabella “articles”.
Bake
Il bake è una utility di console che si occupa di “cucinare” le nostre ricette partendo dal database.
Lanciando un comando di console è possibile generare i Controller, Model e view CRUD di base.
Il comando è il seguente
Seguendo le istruzioni a video ed utilizzando lo schema di “articles” e “comments” otteniamo i seguenti files:
- /app/Controller/ArticlesController.php
- /app/Model/Article.php
- /app/View/Articles/index.ctp
- /app/View/Articles/add.ctp
- /app/View/Articles/edit.ctp
- /app/View/Articles/delete.ctp
- /app/Controller/CommentsController.php
- /app/Model/Comment.php
- /app/View/Comments/index.ctp
- /app/View/Comments/add.ctp
- /app/View/Comments/edit.ctp
- /app/View/Comments/delete.ctp
Facilità di utilizzo
CakePHP ha una curva di apprendimento relativamente semplice anche se è uno strumento molto complesso. Grazie agli standard imposti è consigliato in particolar modo a chi approda per la prima volta in un framework o in quei team dove c’è bisogno di una struttura standard per semplificare il lavoro.
Conclusione
CakePHP ha tantissime funzionalità e quelle mostrate in questo articolo sono delle funzionalità che passano in secondo piano ma sono tra le cose che aiutano a sviluppare velocemente un’applicazione.
Negli articoli futuri seguiremo dei tutorial dove il lato di sviluppo veloce sarà più evidente.
Attendo il profumo delle vostre torte!
- CakePHP 2.8.2 - 03/17/2016
- Reverse Routing - 03/17/2016
- CakePHP 12 Errori da Principiante - 02/24/2016
articolo interessante e nonostante sia essenziale offre diversi spunti per riflettere.
Una cosa di cui ho sentito la mancanza e’ un metro di paragone relativo al paragrafo “Convention Over Configuration”. Anche se l’articolo e’ specifico per CakePHP mi sarebbe piaciuto vedere un ulteriore esempio in cui al posto delle convenzioni viene invece utilizzato un esplicito file di configurazione. Mi chiedo quale sia la via migliore.
Grazie per aver letto l’articolo. Cercherò di approfondire il tema in un articolo successivo. Naturalmente come tutto nel nostro lavoro ci sono più maniere di ottenere un risultato, parlare della via giusta non corretto. Mi posso sbilanciare però dicendo che il non dover pensare alla nomenclatura delle tabelle, delle directory, dei files e classi rende tutto il lavoro più snello e veloce lasciando spazio alla costruzione del nostro progetto e non alla configurazione.
Proverò nel weekend a colmare la lacuna di questo articolo come da te segnalato.
Grazie! Walter