Laravel in pratica. Una guida veloce per realizzare siti web di qualità. Francesco Lettera



Documenti analoghi
PHPUnit Ricettario Del Programmatore Scontroso

MANUALE D USO DELLA PIATTAFORMA ITCMS

Come modificare la propria Home Page e gli elementi correlati

<a href= page2.html > Questo é il link all altra pagina </a> <a href= page2.html > <img src= "lamiaimmagine.jpg"/> </a>

Let's start! File > New Project > Ruby > Ruby on Rails Application (events)

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

Dreamweaver CC Il Corso Fondamentale

Come personalizzare i Live Tiles menu su SharePoint 2013 Autore: Igor Macori,

Marketing di Successo per Operatori Olistici

2010 Ing. Punzenberger COPA-DATA Srl. Tutti i diritti riservati.

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

SCUOLA SECONDARIA DI 1 GRADO GIOVANNI FALCONE Via Ardeatina, 81 Anzio (Roma) APRIRE UN BLOG GRATUITO CON WORDPRESS

Introduzione. Installare EMAS Logo Generator

Sviluppare un DB step by step

Introduzione allo sviluppo Web. Studium Generale, a.a , II semestre

Manuale Utente Amministrazione Trasparente GA

ImporterONE Export Plugin Magento

Dipartimento di Ingegneria Civile e Ambientale TYPO 3 MANUALE UTENTE

Le presenti note vengono rilasciate per presentare le principali novità della release 2010 Sp1 di Contact Pro.

Corso su LINQ Lezione 16. Introduzione

Workland CRM. Workland CRM Rel /11/2013. Attività --> FIX. Magazzino --> NEW. Nessuna --> FIX. Ordini --> FIX

Il sistema di pubblicazione di informazioni didattiche sul sito di Ateneo: guida e regole d uso per i docenti.

Progetto di Ingegneria del Software 2. SWIMv2

Moodle Breve Guida per il Docente versione 1.2. A cura di Federico Barattini federicobarattini@gmail.com

Manuale Utente Albo Pretorio GA

Funzioni non documentate Openoffice.org. 3 Base mini-howto

TUTORIAL PER PRINCIPIANTI Installazione Locomotive

MODULO 5 ACCESS Basi di dati. Lezione 4

Navigare in Internet Laboratorio di approfondimento la creazione di siti web e/o blog. Marco Torciani. (Quinta lezione) Unitre Pavia a.a.

Migriamo da Joomla! 1.5 a 1.7

Giacomo Bruno RENDITE DA AL MESE!

A tal fine il presente documento si compone di tre distinte sezioni:

Tutte le interrogazioni possono essere condotte su qualsiasi campo della banca dati (ad esempio, Forma, Frequenza, Lunghezza, ecc...).

Vi ricordiamo che per qualsiasi problema tecnico o informazione potete contattare info@eduitalia.org oppure Francesco al

Progetto di Ingegneria del Software 2. SWIMv2

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

DOCUMENTO ESPLICATIVO

COME ELIMINARE PARTI DEL TEMPLATE IN PAGINE SINGOLE

Realizzare il layout di un sito web senza utilizzare frame e tabelle

Esercizio data base "Biblioteca"

CORSO DI TECNOLOGIE DIDATTICHE ED EDUCATIVE. Tutorial per la creazione e la gestione di un blog

Innanzitutto andiamo sul sito ed eseguiamo il download del programma cliccando su Download Dropbox.

Russian for Tourism. GUIDA all utilizzo dello SPAZIO PERSONALE DI RETOUR

<?php include './include/page.php';

Manuale Per i Soci Attivi SIE Utilizza al Massimo le potenzialità del nuovo sito SIE per migliorare la Tua Visibilità Online.

Il mio Garmin. Questo sconosciuto!

SharePoints è attualmente disponibile in Inglese, Italiano e Francese.

Manuale d uso Lexun Area Riservata proprietà di logos engineering - Sistema Qualità certificato ISO 9001 Det Norske Veritas Italia

istruzioni per l uso

Wiki di Netapprendere

Gestione del sito web con Drupal

Il calendario di Windows Vista

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

PROGRAMMA DEL CORSO WEB GRAPHIC DESIGNER

Guida all utilizzo del CMS Drupal e alla gestione dei contenuti

Guida WordPress. Indice. 1. Panoramica Accedi al pannello di controllo del sito La Bacheca di Wordpress

ALBO PRETORIO WEB MANUALE DELLA PROCEDURA SOMMARIO. Uso del manuale. Informazioni generali. Interfaccia grafica. Guida di riferimento

GERARCHIE RICORSIVE - SQL SERVER 2008

[FINANZAECOMUNICAZIONE / VADEMECUM]

intranet.ruparpiemonte.it

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

19. LA PROGRAMMAZIONE LATO SERVER

Angelo Gueli da Puntoedu.indire Corso sull uso delle Nuove Tecnologie 1

Japancoolture.com. Manuale caricamento dei contenuti nei profili

Cap. 3. APERTURA NUOVO PROGETTO

ImporterOne Manuale Export Plugin Prestashop

ibooks Author! A cura di Aldo Torrebruno! versione aggiornata al 5/12/2013!

Novità di Access 2010

HTML HTML. HyperText Markup Language. Struttura di un documento. Gli elementi essenziali di un documento HTML sono i seguenti TAG: <HTML>...

MANUALEDIUTILIZZO MODULO CRM POSTVENDITA

Il Web-Service SDMX dell ISTAT

EndNote Web. Quick Reference Card THOMSON SCIENTIFIC

Come creare una pagina Facebook e collegarla al sito mosajco

17 Gli scenari. cartelle di lavoro; unendoli poi in un

SU Suap. IS357_03_01 Lettera aggiornamento SUAP vers Pagina 1 di 10

Stampa unione -contratto di tirocinio. Documentazione

Office Web Components in programmi C# da

COSTRUZIONE SITO WEB da AlterVista (

A tal fine il presente documento si compone di tre distinte sezioni:

Il database management system Access

Guida all uso della piattaforma. portale Weblog & Podcast del MIUR COME UTILIZZARE AL MEGLIO L AMMINISTRAZIONE DEL BLOG

Cookie e Webstorage. Vediamo ora i metodi dell oggetto localstorage. Per memorizzare un valore si utilizza il metodo setitem:

Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara.

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI

2 Fortino Lugi. Figura Errore. Nel documento non esiste testo dello stile specificato Finestra attiva o nuovo documento

Corso html 5. Di Roberto Abutzu. *********** Terza parte: Prime nozioni: Tag e prima pagina, continuazione. **********

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

OSSIF WEB. Manuale query builder

La gestione dei risultati: ZOTERO, un programma gratuito

Invio SMS. DM Board ICS Invio SMS

GUIDA RAPIDA PER LA REGISTRAZIONE DELLE INFORMAZIONI EDITORIALI E PER L INSERIMENTO E LA GESTIONE DEI PRODOTTI

Entrare nel sistema. Clicca su Entra per entrare nel sistema. PAGINA 1

Guida passo-passo. Per imparare a usare il tuo TwinSpace

LINEE GUIDA PER I FORNITORI

Utilizzo del plugin ApSIC Xbench per SDL Trados Studio 2014

Come aggiungere o importare nuovi contatti

Manuale Fornitore E-Vendor

Transcript:

Laravel in pratica Una guida veloce per realizzare siti web di qualità Francesco Lettera This book is for sale at http://leanpub.com/laravel_in_pratica This version was published on 015-08-19 This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and many iterations to get reader feedback, pivot until you have the right book and build traction once you do. 013-015 Francesco Lettera

Tweet This Book! Please help Francesco Lettera by spreading the word about this book on Twitter! The suggested tweet for this book is: Ho appena comprato Laravel in Pratica The suggested hashtag for this book is #laravel. Find out what other people are saying about the book by clicking on this link to search for this hashtag on Twitter: https://twitter.com/search?q=#laravel

Indice Capitolo 3: l approccio RESTful................................. 1 Gestiamo le categorie...................................... 1 Un approccio RESTful per le categorie............................. 1 Cosa abbiamo imparato..................................... 13 Download dell applicazione.................................. 13

Capitolo 3: l approccio RESTful Gestiamo le categorie La tabella delle categorie sarà l anello di congiunzione tra gli utenti della nostra intranet e i documenti caricati dall admin. Occupiamoci della tabella utilizzando il migration system di Laravel che già conosciamo. Posizioniamoci con il prompt dei comandi in C:\wamp\www e digitiamo: php artisan migrate:make create_categorie --create=categorie Modifichiamo il metodo up(), come di consueto. 1 // app/database/migrations/013_07_9_143818_create_categorie_table.php 3 public function up() 4 { 5 Schema::create('categorie', function(blueprint $table) 6 { 7 $table->increments('id'); 8 $table->string('nome_categoria'); 9 $table->timestamps(); 10 }); 11 } Poi ritorniamo sul nostro prompt di comandi e digitiamo: php artisan migrate Nel nostro db sarà quindi presente la nostra tabella categoria, tutta vuota e pronta per essere riempita. Un approccio RESTful per le categorie Gestire le risorse seguendo un approccio RESTful ci garantisce una serie di regole standard. Tali regole saranno applicate per quasi tutte le parti del nostro progetto. Nel corso del libro, infatti, gestiremo anche gli utenti con questo approccio, e le risorse. Laravel ci viene in aiuto perché ha già concepito l approccio RESTful per i suoi Controller. Dal nostro insostituibile prompt dei comandi digitiamo (siamo sempre in C:\wamp\www): php artisan controller:make CategorieController E stato appena creato un nuovo file nella cartella app/controllers

Capitolo 3: l approccio RESTful 1 class CategorieController extends \BaseController { 3 /** 4 * Display a listing of the resource. 5 * 6 * @return Response 7 */ 8 public function index() 9 { 10 // 11 } 1 13 /** 14 * Show the form for creating a new resource. 15 * 16 * @return Response 17 */ 18 public function create() 19 { 0 // 1 } 3 /** 4 * Store a newly created resource in storage. 5 * 6 * @return Response 7 */ 8 public function store() 9 { 30 // 31 } 3 33 /** 34 * Display the specified resource. 35 * 36 * @param int $id 37 * @return Response 38 */ 39 public function show($id) 40 { 41 // 4 }

Capitolo 3: l approccio RESTful 3 43 44 /** 45 * Show the form for editing the specified resource. 46 * 47 * @param int $id 48 * @return Response 49 */ 50 public function edit($id) 51 { 5 // 53 } 54 55 /** 56 * Update the specified resource in storage. 57 * 58 * @param int $id 59 * @return Response 60 */ 61 public function update($id) 6 { 63 // 64 } 65 66 /** 67 * Remove the specified resource from storage. 68 * 69 * @param int $id 70 * @return Response 71 */ 7 public function destroy($id) 73 { 74 // 75 } 76 77 } Wow! Quanta roba. I metodi sono intuitivi, del resto sono ben commentati. Nulla ci vietava di creare questo controller a mano, ma la forza di artisan è proprio quella di abbreviare alcuni aspetti comuni della programmazione PHP. Un paio di ulteriori accorgimenti prima di procedere: creiamo un file Categorie.php all interno della cartella model.

Capitolo 3: l approccio RESTful 4 1 // app/models/categorie.php 3 class Categorie extends Eloquent { 4 5 protected $table = 'categorie'; 6 7 } Ho creato una classe che estende Eloquent. La utilizzeremo per le nostre query richiamate dal Controller CategorieController.php. Poi passiamo al capitano di rotta (routes.php) e indichiamogli che desideriamo utilizzare un approccio RESTful: 1 // app/routes.php 3 Route::resource('categorie', 'CategorieController'); Questa singola dichiarazione crea una serie di regole di route che gestiranno i metodi RESTful del nostro controller. Diamo un occhiata a questa tabella: METODO PERCORSO AZIONE NOME ROUTE GET /categorie index categorie.index GET /categorie/create index categorie.create POST /categorie store categorie.store GET /categorie/{id} show categorie.show GET /categorie/{id}/edit edit categorie.edit PUT/PATCH /categorie/{id} update categorie.update DELETE /categorie/{id} destroy categorie.destroy La tabella elenca tutti gli stati del controller RESTful. Avrai già notato che il percorso index è simile al percorso store. In realtà la differenza sostanziale è nel metodo: il primo è GET, il secondo è POST. Cioè Laravel riconosce se i dati provengono tramite GET o POST e reindirizza al metodo opportuno. Ma diamo vita a questo controller. Inserimento della categoria Prima di tutto il form per inserire la categoria. Andrà nel metodo create():

Capitolo 3: l approccio RESTful 5 1 // app/controllers/categoriecontroller.php 3 public function create() 4 { 5 $this->layout->content = View::make('categorie.create'); 6 } Poi creiamo la nostra view. Già sappiamo come fare: 1 // app/views/categorie/create.blade.php 3 @section('content') 4 5 {{ Form::open(array('url' => 'categorie', 'method' => 'POST')) }} 6 <div class="row"> 7 <div class="col-lg-3"> 8 <div class="form-group"> 9 {{ Form::label('nome_categoria', 'Nome categoria') }} 10 {{ Form::text('nome_categoria', '', array('class'=>'form-control')) }} 11 </div> 1 </div> 13 </div> 14 15 <div class="row"> 16 <div class="col-lg-3"> 17 <div class="form-group"> 18 {{ Form::submit('Aggiungi questa categoria', array('class' =>'btn b\ 19 tn-success btn-large')) }} 0 </div> 1 </div> </div> 3 {{ Form::close() }} 4 @stop Diamo un occhiata al parametro url del form: punta a categorie e il suo metodo è POST. Se diamo un occhiata alla tabella di prima, sapremo già quale metodo recupererà il campo nome_categoria: è il metodo store(). Occupiamoci di quest ultimo:

Capitolo 3: l approccio RESTful 6 1 // app/controllers/categoriecontroller.php 3 public function store() 4 { 5 $categorie = new Categorie; 6 $categorie->nome_categoria = Input::get('nome_categoria'); 7 $categorie->save(); 8 return Redirect::action('CategorieController@index'); 9 } Avrai notato che ho istanziato l oggetto categorie per utilzzarlo nel metodo. $categorie->nome_- categoria è infatti il nome del campo della tabella categorie: l ho valorizzato con l input recuperato dal form (noterai l orrore della mancanza di validazione. Don t worry, ne parleremo più in là) e poi ho dato il comando save() (E qui noterai l eleganza di Laravel!) per salvare il tutto nel db. Fatto! Dopo questa operazione, un redirect al metodo index() del nostro controller. A proposito, quando dobbiamo redirezionare verso un metodo del controller, il metodo (perdona il bisticcio) è action: 1 return Redirect::action('CategorieController@index'); Elenco delle categorie Realizziamo adesso la lista dei dati inseriti. Questa lista sarà all interno del metodo index() del nostro controller. 1 // app/controllers/categoriecontroller.php 3 public function index() 4 { 5 $data['categorie_lista'] = Categorie::all(); 6 $this->layout->content = View::make('categorie.categorie_lista', $data); 7 } Con Categorie::all() recuperiamo immediatamente la lista delle categorie inserite. Si tratta di una query banale, e sarebbe antieconomico realizzare un metodo all interno del model Categorie.php. Laravel ci strizza l occhio e ci dà subito la lista. Per query più complesse, però, è sempre consigliabile utilizzare i metodi nel model. Anche per una questione di ordine. Passiamo dunque l array valorizzato $data['categorie_lista'] alla view: 1 $this->layout->content = View::make('categorie.categorie_lista', $data); E realizziamo la view. Ho pensato ad una gloriosa tabella:

Capitolo 3: l approccio RESTful 7 1 // app/views/categorie/categoria_lista.blade.php 3 @section('content') 4 <table class="table"> 5 <tr> 6 <td>categoria</td> 7 <td>azioni</td> 8 </tr> 9 @foreach($categorie_lista as $c) 10 <tr> 11 <td>{{ $c['nome_categoria'] }}</td> 1 <td><a href="{{ url('categorie/'.$c['id'].'/edit') }}" class="btn btn-wa\ 13 rning">modifica</a></td> 14 <td><a href="{{ url('categorie/'.$c['id']) }}" class="btn btn-warning">c\ 15 ancella</a></td> 16 </tr> 17 @endforeach 18 </table> 19 0 @stop Se hai letto l introduzione a Blade non hai bisogno di ulteriori spiegazioni sulla sintassi di questa view. Vorrei, però, farti notare i due link della colonna AZIONI: il primo serve per la modifica e punta a categorie/{id}/edit. Cioè al metodo edit() (dài un occhiata alla tabella: tutto è come previsto); il secondo link, invece, punta a categorie/{id} con metodo GET, quindi sarà accolto da show(). Recupero e modifica della categoria Il recupero della categoria da modificare è affidato al metodo edit(): 1 // app/controllers/categoriecontroller.php public function edit($id) 3 { 4 $data['categoria_dettaglio'] = Categorie::find($id); 5 $this->layout->content = View::make('categorie.edit', $data); 6 } Anche in questo caso, come l elenco completo delle categoria, la query è piuttosto semplice ed Eloquent ci soccorre con un istruzione più che mai chiara: find(). Ecco la nostra view:

Capitolo 3: l approccio RESTful 8 1 // app/views/categorie/edit.blade.php 3 @section('content') 4 5 {{ Form::open(array('url' => 'categorie/'. $categoria_dettaglio->id, 'method' =>\ 6 'PUT')) }} 7 <div class="row"> 8 <div class="col-lg-3"> 9 <div class="form-group"> 10 {{ Form::label('nome_categoria', 'Nome categoria') }} 11 {{ Form::text('nome_categoria', $categoria_dettaglio->nome_categoria, ar\ 1 ray('class'=>'form-control')) }} 13 </div> 14 </div> 15 </div> 16 17 <div class="row"> 18 <div class="col-lg-3"> 19 <div class="form-group"> 0 {{ Form::submit('Aggiorna questa categoria', array('class' =>'btn b\ 1 tn-success btn-large')) }} </div> 3 </div> 4 </div> 5 {{ Form::close() }} 6 @stop Piuttosto simile alla view categorie/create.blade.php, ma ti invito a dare un occhiata all url del form e al metodo. Il primo punta a categorie/{id} e il metodo è PUT. Quindi, da tabella, punterà a update(): 1 // app/controllers/categoriecontroller.php 3 public function update($id) 4 { 5 $categoria = Categorie::find($id); 6 $categoria->nome_categoria = Input::get('nome_categoria'); 7 $categoria->save(); 8 return Redirect::action('CategorieController@index'); 9 }

Capitolo 3: l approccio RESTful 9 Anche in questo caso utilizziamo find($id) come nel metodo edit(), ma il fine è diverso. Abbiamo infatti recuperato il record, sostituito con il nuovo input e salvato nel db con il comando che già conosciamo save(). Cancellazione della categoria La view che mostrava la lista delle categoria conteneva anche il link per la cancellazione. Eccolo qui: 1 // app/views/categorie/categoria_lista.blade.php 3 <td><a href="{{ url('categorie/'.$c['id']) }}" class="btn btn-warning">cancella\ 4 </a></td> Se riprendiamo ancora una volta la tabella di tutti i metodi RESTful, noteremo che questo URL corrisponde a: METODO PERCORSO AZIONE NOME ROUTE GET /categorie/{id} show categorie.show Dunque il metodo è show(): 1 // app/controllers/categoriecontroller.php 3 public function show($id) 4 { 5 $data['categoria_dettaglio'] = Categorie::find($id); 6 $this->layout->content = View::make('categorie.show', $data); 7 } Niente che tu non abbia già visto. Ma diamo un occhiata alla view: è lei che farà la differenza: 1 // app/views/categorie/show.blade.php 3 @section('content') 4 <div class="row"> 5 <div class="col-lg-6"> 6 <div class="form-group"> 7 <h3>sei sicuro di voler cancellare questa categoria?</h3> 8 </div> 9 </div> 10 </div>

Capitolo 3: l approccio RESTful 10 11 1 {{ Form::open(array('url' => 'categorie/'. $categoria_dettaglio->id, 'method' =>\ 13 'DELETE')) }} 14 <div class="row"> 15 <div class="col-lg-3"> 16 <div class="form-group"> 17 {{ $categoria_dettaglio->nome_categoria }} 18 </div> 19 </div> 0 </div> 1 <div class="row"> <div class="col-lg-3"> 3 <div class="form-group"> 4 {{ Form::submit('Cancella questa categoria', array('class' =>'btn b\ 5 tn-success btn-large')) }} 6 </div> 7 </div> 8 <div class="col-lg-3"> 9 <a href="{{ url('categorie') }}" class="btn btn-warning btn-large">no, c\ 30 i ho ripensato</a> 31 </div> 3 </div> 33 {{ Form::close() }} 34 @stop La particolarità è nel method="delete" del form. Ancora una volta la tabella: METODO PERCORSO AZIONE NOME ROUTE DELETE /categorie/{id} destroy categorie.destroy Perfetto. Cliccando sul bottone Cancella questa categoria inneschiamo il metodo destroy() del nostro controller: 1 // app/controlers/categoriecontroller.hp 3 public function destroy($id) 4 { 5 $categoria = Categorie::find($id); 6 $categoria->delete(); 7 return Redirect::action('CategorieController@index'); 8 } Ancora find($id) e poi delete().

Capitolo 3: l approccio RESTful 11 Un ritocco al template E arrivato il momento di ritoccare il nostro template per renderlo più carino. Aggiungiamo questa porzione di codice prima del <div="container"> 1 // app/views/template/main.blade.php <div class="navbar navbar-inverse navbar-fixed-top"> 3 <div class="container"> 4 <button type="button" class="navbar-toggle" data-toggle="collapse" data-\ 5 target=".nav-collapse"> 6 <span class="icon-bar"></span> 7 <span class="icon-bar"></span> 8 <span class="icon-bar"></span> 9 </button> 10 <a class="navbar-brand" href="#">intranet Project</a> 11 <div class="nav-collapse collapse"> 1 <ul class="nav navbar-nav"> 13 <li class="active"><a href="{{ url('/login') }}">Login</a></li> 14 </ul> 15 </div><!--/.nav-collapse --> 16 </div> 17 </div> Poi, prima della chiusura del tag </head>, questa piccola regola CSS che aggiunge un po di margine superiore: 1 <style type="text/css"> body { 3 padding-top: 70px; 4 } 5 </style> Il template corretto dovrebbe avere queste sembianze:

Capitolo 3: l approccio RESTful 1 1 // app/views/template/main.blade.php 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <title>bootstrap 101 Template</title> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 8 <!-- Bootstrap --> 9 <link rel="stylesheet" href="{{ url('/bs/css/bootstrap.min.css') }}" media="\ 10 screen"> 11 <style type="text/css"> 1 body { 13 padding-top: 70px; 14 } 15 </style> 16 </head> 17 <body> 18 <div class="navbar navbar-inverse navbar-fixed-top"> 19 <div class="container"> 0 <button type="button" class="navbar-toggle" data-toggle="collapse" data-\ 1 target=".nav-collapse"> <span class="icon-bar"></span> 3 <span class="icon-bar"></span> 4 <span class="icon-bar"></span> 5 </button> 6 <a class="navbar-brand" href="#">intranet Project</a> 7 <div class="nav-collapse collapse"> 8 <ul class="nav navbar-nav"> 9 <li class="active"><a href="{{ url('/login') }}">Login</a></li> 30 </ul> 31 </div><!--/.nav-collapse --> 3 </div> 33 </div> 34 <div class="container"> 35 <div class="row"> 36 <div class="col-lg-1"> 37 @yield('content') 38 </div> 39 </div> 40 </div> 41 <!-- JavaScript plugins (requires jquery) --> 4 <script src="{{ url('http://code.jquery.com/jquery.js') }}"></script>

Capitolo 3: l approccio RESTful 13 43 <!-- Include all compiled plugins (below), or include individual files as ne\ 44 eded --> 45 <script src="{{ url('/bs/js/bootstrap.min.js') }}"></script> 46 </body> 47 </html> Cosa abbiamo imparato Un approccio RESTful offre una serie di operazioni standard per gestire risorse. Utilizzarlo garantisce una certa omogeneità, soprattutto quando si realizza un applicazione backend. Download dell applicazione Il progetto web fin qui discusso lo puoi scaricare a questo indirizzo https://www.dropbox.com/s/ laptcpv1cnng58c/laravel_.zip. Se desideri testare subito l applicazione (saltando tutti gli step del libro), ricordati di lanciare il comando php artisan migrate per aggiornare il tuo db.