Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
php:laravel [2017/04/30 22:46] – WIP apressatophp:laravel [2017/04/30 23:47] (versione attuale) – Prima Stesura Definitiva apressato
Linea 1: Linea 1:
 ====== Laravel ====== ====== Laravel ======
  
-<WRAP center round alert 60%> +<WRAP center round important 60%> 
-**Attenzione:** Documento non completo in fase di stesura+**Attenzione:** Documento completo in fase di revisione
 </WRAP> </WRAP>
  
Linea 126: Linea 126:
 In questo breve esempio sfruttiamo la classe Request, mappata tramite alias verso ''Illuminate\Support\Facades\Request'', per recuperare metodo HTTP e URL della richiesta. E’ interessate però sapere che all’interno del file relativo (presente nella cartella ''vendor''), non è presente nessun metodo statico ''method()'' o ''url()''. In questo breve esempio sfruttiamo la classe Request, mappata tramite alias verso ''Illuminate\Support\Facades\Request'', per recuperare metodo HTTP e URL della richiesta. E’ interessate però sapere che all’interno del file relativo (presente nella cartella ''vendor''), non è presente nessun metodo statico ''method()'' o ''url()''.
  
-L’unico metodo disponibile è ''getFacadeAccessor'' che determina il nome dell’oggetto presente nel ServiceContainer sul quale invocare il metodo relativo. Grazie al //magic method// di PHP ''__callStaticMethod'' è infatti possibile invocare il metodo sull’istanza dell’oggetto relativo che nel caso di ''Request'' è ''Illuminate\Http\Request''.+L’unico metodo disponibile è ''getFacadeAccessor'' che determina il nome dell’oggetto presente nel ServiceContainer sul quale invocare il metodo relativo. Grazie al //magic method// di PHP ''<nowiki>__</nowiki>callStaticMethod'' è infatti possibile invocare il metodo sull’istanza dell’oggetto relativo che nel caso di ''Request'' è ''Illuminate\Http\Request''.
  
 Consultando questa [[http://laravel.com/docs/5.1/facades#facade-class-reference|pagina]] sarà possibile reperire l’elenco dei facade disponibili in Laravel e dei quali verrà fatto largo uso nei prossimi articoli. Consultando questa [[http://laravel.com/docs/5.1/facades#facade-class-reference|pagina]] sarà possibile reperire l’elenco dei facade disponibili in Laravel e dei quali verrà fatto largo uso nei prossimi articoli.
Linea 1980: Linea 1980:
 Per utilizzala si dovrà richiamarla come se fosse una normale regola Laravel.      Per utilizzala si dovrà richiamarla come se fosse una normale regola Laravel.     
 ===== Laravel: gli ultimi aggiornamenti ===== ===== Laravel: gli ultimi aggiornamenti =====
 +    
 +==== Autenticazione e validazione dei dati con Laravel 5.2 ====                                 
 +I precedenti capitoli della guida avevano come riferimento Laravel 5.1, ma tutte le funzionalità descritte sono ancora valide anche per i rilasci successivi. Questa versione è una **LTS** (''Long Time Support''), ovvero una release destinata ad un supporto della durata di 3 anni; considerando che venne completata nel giugno del 2015 potrebbe essere una buona idea quella di sceglierla per i propri progetti, indipendentemente dalla disponibilità di versioni più recenti (le minor 5.2 e 5.3).  
  
 +=== Nuovo motore di autenticazione ===  
 +La più grossa novità introdotta in Laravel 5.2 riguarda l'**autenticazione**. E' infatti possibile avere più strategie di autenticazione, mentre nella 5.1 era possibile averne solo una. Per esempio si possono definire diverse utenze (admin e user) e sfruttare due logiche di autenticazione differenti.  
 +Oltre a questa modifica strutturale è stato introdotto un nuovo comando:  
 +<code php>
 +php artisan make:auth
 +</code>
 +   
 +che permette di generare in automatico una serie di view da sfruttare con i controller standard dedicati all'autenticazione. Il comando genera view per tutti gli aspetti del flow di autenticazione e registrazione (login, register, password reset) e configura le rotte, è quindi molto utile per avere una struttura di pagine semplice e funzionale da personalizzare.  
 +
 +=== Binding di modelli implicito ===  
 +La seconda modifica riguarda le rotte ed in particolare il **model binding**, ovvero la possibilità  di avere a disposizione nel controller il modello associato alla rotta senza occuparci personalmente del suo recupero dal database.  Rispetto alla versione precedente, dove era necessario usare il metodo ''Route::model'', Laravel 5.2 è  più "intelligente" e permette  di configurare un binding sfruttando solamente il type hinting di PHP:  
 +<code php>
 +Route::get('/user/{user}', function (User $user) {
 +        return $user;
 +});
 +</code>
 +  
 +
 +=== Gruppi di Middleware e Rate Limiting ===  
 +Sempre riguardo alla gestione delle rotte, un'altra novità  riguarda la possibilità  di raggruppare i middleware in gruppi richiamabili all'interno delle rotte in modo da permettere una maggiore configurabilità. All'interno del file ''App\Http\Kernel.php'' è  possibile definire i gruppi come vettori di classi. Dal punto di vista delle rotte la modifica è trasparente: i gruppi possono essere richiamati come un normale middleware.  
 +Inoltre è stato introdotto un nuovo middleware, ''throttle'', utile nel caso si utilizzino API, per limitare il numero di chiamate dallo stesso IP.  
 +
 +=== Validazione ===  
 +Il motore di validazione di Laravel acquisisce due novità. La prima riguarda la validazione degli array ricevuti tramite parametri della request. Grazie all'utilizzo della **wildcard *** è possibile verificare che tutti gli elementi in una lista rispettino la regola definita. Per esempio con la regola  
 +<code php>
 +'utente.*.nome' => 'required'
 +</code>
 +  
 +ci assicuriamo che ogni oggetto utente abbia il nome valorizzato.   
 +La seconda novità  riguarda la disponibilità  di una nuova meta regola: ''bail'' che permette di ottimizzare il processo di validazione interrompendo le regole successive appena una regola fallisce. Per esempio con la regola  
 +<code php>
 +'user_id' => 'bail|integer|unique:users'
 +</code>
 +  
 +comunichiamo a Laravel di evitare di eseguire la query per controllare l'univocità dell'id se questo non è un intero; senza l'utilizzo di ''bail'' essa verrebbe comunque eseguita.                                                     
 +
 +
 +==== Full text search in Laravel 5.3 ====                                 
 +Dopo aver aggiornato il framework dalla versione 5.1 alla 5.2, è giunto il momento di passare alla 5.3 che è l'ultima versione del framework, pubblicata il 23 agosto del 2016.   
 +
 +=== Laravel Scout ===  
 +La principale novità è rappresentata da **Scout**, un pacchetto addizionale rilasciato dalla community di Laravel in grado di integrare i model del framework  con un motore di **full text search**. 
 +Al momento l'unico driver disponibile è quello per integrarsi con Algolia, un servizio remoto per le ricerche full text, ma grazie alla facile integrazione è possibile implementare il proprio engine o utilizzare quelli disponibili sui repository di [[http://www.html.it/guide/composer-e-packagist-la-guida/|composer]] (ne sono presenti alcuni che utilizzano Elastic  Search, Lucene o Solr).  
 +
 +=== Laravel Passport ===  
 +Un secondo pacchetto addizionale ma ufficiale è **Passport**, utile per implementare rapidamente autenticazioni **OAuth 2**; perfetto per quelle applicazioni sviluppate come API che richiedono un motore di autenticazione efficiente, granulare e soprattutto standard.  
 +
 +=== Mailables e Notification ===  
 +Il motore interno delle email è stato in gran parte rivisto grazie all'introduzione dei **Mailables**, oggetti specializzati che rappresentano un modello dati inviabile via mail. La novità permette di spedire mail sfruttando un pattern più object-oriented del precedente e utilizzando i code standard di Laravel.  
 +Oltre alle modifiche al gestore interno di email, Laravel 5.3 introduce anche un'astrazione dedicata al concetto più ampio di notifiche inviabili non solo via mail, ma anche tramite SMS o messaggi di testo. Per eventuali nuove implementazioni di canali di notifica è stata istituita anche una community dedicata  ad eventuali moduli addizionali: il [[http://laravel-notification-channels.com/|Laravel Notification Channel]].  
 +
 +=== Laravel Echo ===  
 +**Echo** è un pacchetto Javascript perfettamente integrato con i servizi backend in Laravel, utile per implementare un sistema ad eventi client/server.  E' installabile tramite NPM come un normale pacchetto Javascript e offre un'API consistente per inviare ed ascoltare eventi al server sfruttando  la tecnologia **WebSocket**.  
 +
 +=== Variabile $loop ===  
 +Utilizzando la nuova versione del framework avremo a disposizione una nuova variabile ''$loop'' all'interno dei cicli nelle viste blade. Essa contiene informazioni sullo stato dell'iterazione per rendere più semplici alcune operazioni ordinarie. Per esempio possiamo accedere all'indice corrente (tramite la  proprietà ''index'') o allo stato dello step corrente (tramite le proprietà ''first'' e ''last'').  
 +
 +=== Nuova struttura delle cartelle ===  
 +La modifica più apparente è sicuramente quella che ha impattato le cartelle del framework. Le rotte sono state spostate al di fuori della cartella ''app/'' in modo  da essere compatibili agli standard PSR in merito ai namespace e alla struttura di cartelle in un progetto PHP. Inoltre sono state rimosse alcune cartelle di default  vuote che ora verranno create solamente se richieste (per esempio ''Jobs'', ''Events'' o ''Policies'').  
 +
 +=== Modifiche minori ===  
 +Oltre alle modifiche particolarmente impattanti descritte sopra sono state introdotte una serie di migliorie di minor rilevanza:   
 +  * nuovo helper ''cache'' per accedere o modificare i valori in cache senza utilizzare la facade Cache; 
 +  * la possibilità di modificare il paginatore di default di Laravel; 
 +  * modifica ai metodi di Query Builder che ora restituiscono una Collection invece di un semplice array PHP.                                                      
 +
 +
 +==== Slot, notifications, automatic facades e Dusk in Laravel 5.4 ====                                 
 +
 +=== Componenti e Slot in Blade in Laravel 5.4 ===  
 +Una delle  modifiche più rilevanti tra quelle introdotte in Laravel 5.4 riguarda il layer HTML del framework. A partire da questa release sarà  infatti possibile utilizzare i **componenti**, un nuovo costrutto dedicato alla **prototipizzazione dell'HTML**. Grazie ai componenti sarà  possibile creare dei blocchi di markup flessibili grazie al concetto di **slot**.  
 +All'interno di un ''partial blade'' si potrà definire, più o meno come facciamo con i layout, zone all'interno delle quali dovrà  essere inserito il contenuto del componente, grazie alla variabile ''$slot''. Analizziamo il seguente esempio:  
 +<code php>
 +//panel.blade.php
 +<div class="panel">
 +    <div class="panel-body">
 +        {{ $slot }}
 +    </div>
 +</div>
 + 
 +//page.blade.php
 +@component('panel')
 +    I am the panel body
 +@endcomponent
 +</code>
 +  
 +La logica di default prevede un unico slot disponibile all'interno dei componenti, ma se avessimo bisogno di più slot possiamo utilizzare i ''named slot'':  
 +<code php>
 +<div class="panel">
 +    <div class="panel-heading">
 +        {{ $heading }}
 +    </div>
 +    <div class="panel-body">
 +        {{ $slot }}
 +    </div>
 +</div>
 + 
 +@component('panel')
 +    @slot('heading')
 +        I am the heading
 +    @endslot
 +    I am the panel body
 +@endcomponent
 +</code>
 +  
 +
 +=== Notifications ===  
 +Le **Notifications** sono un nuova tipologia di oggetto presente in Laravel e rappresentano appunto una notifica che può essere inviata agli utenti sfruttando diversi canali, per esempio email o SMS.  
 +Grazie a questa classe possiamo astrarre il messaggio dalla tipologia di trasporto utilizzato per rendere quindi il tutto più flessibile e configurabile. Le notifiche si integrano perfettamente con le code Laravel e possono essere create tramite un nuovo e dedicato comando di artisan da linea di comando.  
 +
 +=== Automatic Facades ===  
 +La terza grande novità  non riguarda nuove funzionalità, ma un nuova modalità  di organizzazione del codice e di gestione delle dipendenze. Grazie alle **automatic facades** sarà  possibile trasformare qualsiasi classe, senza ulteriori configurazione, in una classe Facade che può essere utilizzata facilmente in altre classi come una normale Facade.  
 +
 +=== Abbreviazioni nelle collection ===  
 +Grazie ai magic method di PHP è stato possibile aggiungere una nuova funzionalità  alle Collection. Nel caso dovesse servire invocare un metodo per ogni elemento della collection, potremo farlo senza creare una closure da passare al metodo ''each''. Un esempio è senza ombra di dubbio più esplicativo:  
 +<code php>
 + //al posto di:
 +$users->each(function($user) {
 +    $user->enable();
 +});
 +
 +//potremo scrivere
 +$users->each->enable();
 +</code>
 +  
 +
 +=== Aggiornamenti nel motore di routing ===  
 +Laravel 5.4 ha parzialmente modificato la configurazione delle rotte sfruttando una sintassi più fluente sia nella creazione che nell'impostazione di middleware e prefissi:  
 +<code php>
 +Route::name('login')->get('login'), function() { .... });
 +Route::name('logout')->middleware('auth')->get('logout'), function() { .... });
 +Route::name('logout')->middleware('auth')->get('logout'), function() { .... });
 +</code>
 +  
 +
 +=== Laravel Dusk ===  
 +Oltre alle modifiche al core di Laravel è stato introdotto un nuovo modulo chiamato **Dusk**, si tratta di un tool per test ''end-to-end'' che sfrutta un browser con un supporto completo ad applicazioni JavaScript. Con Dusk potremo creare test invocando azioni sulla pagina web come un click su un pulsante o la digitazione di qualche parametro in un form.  
 +Dusk estende componenti che funzionano solamente con pagine statiche, per poter funzionare anche con applicazioni che fanno uso di Javascript. Per installarlo è necessario scaricare una nuova dipendenza di [[http://www.html.it/guide/composer-e-packagist-la-guida/|composer]] ''laravel/dusk'' e, una volta scritto il test, invocare il nuovo comando   
 +<code php>
 +php artisan dusk
 +</code>
 +  
 +
 +=== Laravel Mix ===  
 +Questo aggiornamento introduce anche un cambiamento nella modalità  di compilazione e generazione delle risorse statiche client-side (js, css, ...). **Mix** non utilizza più Gulp, ma include direttametne **Webpack**, un moderno e innovativo motore di compilazione di assets.  
 +
 +=== Anticipazioni su Laravel 5.5 ===  
 +Nonostante sia passato poco dal rilascio della versione 5.4, la comunità  di sviluppatori Laravel è già  in fermento per la prossima versione, la 5.5, soprattutto per una novità già  comunicata ufficialmente dagli autori del framework: la prossima versione infatti richiederà [[http://www.html.it/articoli/php-7-le-principali-novita/|PHP 7.0]] e non funzionerà  con versioni precedenti di PHP..                                                     
 +
 +
 +
 +===== Info =====
  
 +^ Corso ^^^
 +|[[http://www.html.it/guide/laravel-la-guida/]]|||
 +^ Autore ^^^
 +|[[http://www.html.it/autore/albertobot/|Alberto Bottarini]]|||
 +^Tavola Release^^^
 +^Lezione^Ultimo \\ Aggiornamento^Allegato^
 +|01. Installazione di Laravel|2 ottobre 2015| |
 +|02. Laravel, il pattern di base: Facade|9 ottobre 2015| |
 +|03. Laravel, struttura di un progetto e configurazioni generali|13 novembre 2015| |
 +|04. Gestire il routing con Laravel|23 ottobre 2015| |
 +|05. I controller e la gestione delle richieste in Laravel|30 ottobre 2015|{{:php:laravel:biblios-3.0.zip|biblios-3.0}}|
 +|06. Definizione delle views e template blade con Laravel|27 novembre 2015|{{:php:laravel:06-view.zip|06-view}}|
 +|07. Eloquent: l'ORM di Laravel|30 dicembre 2015| |
 +|08. Eloquent, le relazioni|8 gennaio 2016| |
 +|09. Eloquent, relazioni uno a molti, molti a molti e polimorfiche|22 gennaio 2016| |
 +|10. Eloquent e Migration in Laravel|19 febbraio 2016| |
 +|11. Eloquent e Seeder in Laravel|11 marzo 2016| |
 +|12. Database, modelli, Factory e seed|8 aprile 2016| |
 +|13. Controller e interfacce per le operazioni CRUD|29 aprile 2016|{{:php:laravel:biblios-5.0.zip|biblios-5.0}}|
 +|14. I middleware in un'applicazione basata su Laravel|13 maggio 2016| |
 +|15. Service Provider in Laravel|20 maggio 2016|{{:php:laravel:biblios-6.0.zip|biblios-6.0}}|
 +|16. Service Container in Laravel|10 giugno 2016| |
 +|17. Gestione Utenti in Laravel|27 maggio 2016| |
 +|18. Login e registrazione utenti|1 luglio 2016| |
 +|19. Pagina privata, amministratori e anagrafica|29 luglio 2016| |
 +|20. Localizzazione e pluralizzazione|2 settembre 2016| |
 +|21. Laravel e la validazione dei dati|23 settembre 2016|{{:php:laravel:biblios-7.0.zip|biblios-7.0}}|
 +|22. Autenticazione e validazione dei dati con Laravel 5.2|4 novembre 2016| |
 +|23. Full text search in Laravel 5.3|26 novembre 2016| |
 +|24. Slot, notifications, automatic facades e Dusk in Laravel 5.4|20 febbraio 2017| |
  
-<spoiler> 
-http://www.html.it/guide/laravel-la-guida/ 
-</spoiler> 
  
  
php/laravel.1493592391.txt.gz · Ultima modifica: 2017/04/30 22:46 da apressato
Torna su
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0