Guida introduttiva - informazioni di riferimento (Drupal 8)
Drupal 8 utilizza una serie di funzionalità avanzate del linguaggio PHP e librerie di terze parti complesse per offrire agli sviluppatori il più potente API disponibile tra i CMS. Sebbene gli sviluppatori esperti di Drupal 7 possano notare alcuni cambiamenti significativi, gran parte della struttura di base rimane familiare.
Se alcuni dei concetti presentati in questa guida passo passo per sviluppatori di moduli D8 vi risultano nuovi, il materiale seguente può esservi utile. Tuttavia, non è necessario avere una conoscenza approfondita per passare alla descrizione del modulo D8.
Programmazione orientata agli oggetti (OOP)
L’OOP, sebbene inizialmente possa sembrare complessa, è oggi ampiamente riconosciuta come il metodo migliore.
Per una panoramica generale delle migliori pratiche PHP, leggete phptherightway.com. Drupal non utilizza tutti gli strumenti e metodi documentati lì, ma rappresenta un’eccellente introduzione a PHP e alle funzionalità del linguaggio.
Rinfrescate le vostre conoscenze di OOP leggendo la documentazione ufficiale PHP su classi e oggetti, oltre ad alcuni di questi ottimi tutorial:
- PHP OOP in azione completa
- Programmazione orientata agli oggetti (Wikipedia)
- PHP orientato agli oggetti per principianti (su tuts+)
- Concetti orientati agli oggetti (tutorialspoint.com)
- Programmazione orientata agli oggetti in PHP (phpro.org)
- Programmazione orientata agli oggetti in PHP (YouTube)
- Fondamenti di programmazione: progettazione orientata agli oggetti (lynda.com)
- 12 concetti OOP PHP essenziali
- Percorso OOP su SymfonyCasts (precedentemente KNP University)
Drupal 8 utilizza anche diversi pattern di progettazione comuni, ed è utile avere una conoscenza generale di essi:
Factory Pattern e Late Static Binding
Design pattern del software (Wikipedia)
Fondamenti di programmazione: design pattern (lynda.com)
@todo: aggiungere ulteriori riferimenti alla documentazione dei pattern usati...
Namespace PHP
Se non avete familiarità con i namespace in PHP, provate alcuni di questi articoli:
- Come usare i namespace in PHP
- PHP: Namespace
- Video sui namespace PHP
- Namespace PHP spiegati (Dayle Rees)
- Namespace in PHP (tuts+)
Nella maggior parte dei casi, il codice Drupal è organizzato in namespace basati sul modulo a cui appartiene.
Esempio: namespace per block.module
namespace Drupal\block;
@todo: spiegare perché a volte è Drupal\ e altre Drupal\\ [Controller|Form|Plugin| ecc.] e come sapere quale usare...
Scoprite di più sugli standard di namespace di Drupal. Per approfondire l’uso di PSR-4 in Drupal. Un IDE ben configurato dovrebbe riconoscere i namespace PHP e fornire assistenza e autocompletamento.
Dependency Injection
Sebbene la dependency injection sia anch’essa un design pattern OOP, la menzioniamo separatamente perché Drupal 8 la utilizza intensivamente, ed è importante comprenderne le basi per accedere e usare molti dei principali API.
Leggete su dependency injection in PHP, e anche gli altri articoli collegati in quella pagina. In particolare questo articolo, poiché Drupal fa ampio uso del service container di Symfony a cui fa riferimento.
Vedi anche:
Symfony
Symfony è un framework PHP da cui Drupal eredita componenti per ridurre la duplicazione del codice nei progetti PHP. Gran parte del codice che Drupal 8 usa per gestire routing, sessioni e il service container proviene da Symfony 2 (successivamente aggiornato a Symfony 3). Se volete sapere di più su questa scelta, consultate questa presentazione di alexpott, core committer.
Consultate il manuale di Symfony 2 e approfondite le vostre conoscenze su Symfony. Anche se non tutto è necessario per capire Drupal, conoscere come funziona Symfony vi renderà sviluppatori migliori sia per Drupal che per PHP. Potrebbe interessarvi anche il glossario Symfony.
Controllate il file core/composer.lock per vedere le librerie Symfony. A partire da Drupal 8.6.15, include Symfony PHP e librerie strettamente correlate:
...
"symfony/class-loader": "~3.4.0",
"symfony/console": "~3.4.0",
"symfony/dependency-injection": "~3.4.26",
"symfony/event-dispatcher": "~3.4.0",
"symfony/http-foundation": "~3.4.26",
"symfony/http-kernel": "~3.4.14",
"symfony/routing": "~3.4.0",
"symfony/serializer": "~3.4.0",
"symfony/translation": "~3.4.0",
"symfony/validator": "~3.4.0",
"symfony/process": "~3.4.0",
"symfony/polyfill-iconv": "^1.0",
"symfony/yaml": "~3.4.5",
"twig/twig": "^1.38.2",
"doctrine/common": "^2.5",
"doctrine/annotations": "^1.2",
...
Annotazioni
Drupal 8 utilizza le annotazioni PHP — commenti @docblock aggiunti al codice con una sintassi specifica — per rilevare i plugin e fornire ulteriore contesto/metadati al codice eseguibile. Le annotazioni vengono lette tramite l’analizzatore di annotazioni Doctrine (v1.6) e trasformate in informazioni che Drupal può usare per comprendere meglio il vostro codice.
Scoprite di più sull’uso delle annotazioni per il rilevamento dei plugin.
Consultate l’elenco di tutti i tipi di annotazioni in Drupal 8.
Vedi anche: PHPDoc (Wikipedia)
Plugin
I plugin forniscono piccole funzionalità in modo che possano essere facilmente sostituite con altri plugin. I plugin che svolgono funzioni simili appartengono allo stesso tipo. Ad esempio, “Field Widget” è un tipo di plugin, e ogni singolo widget di campo (come campo di testo, area di testo, data, ecc.) è implementato come plugin.
Scoprite di più sull’API dei plugin in Drupal 8.
Servizi
In Drupal 8, un servizio è qualsiasi oggetto gestito dal service container. Il concetto di servizi è stato introdotto per separare funzionalità riutilizzabili, rendendole estendibili e sostituibili registrandole nel contenitore dei servizi legato alla dependency injection.
Vedi anche: Service Container per Drupal Geeks
Altre risorse
Di seguito un elenco di risorse aggiuntive per aiutarvi a familiarizzare con Drupal 8: