Laravel
Contingut
Intro i referències
Laravel és un framework web per a PHP que està agafant molta força.
Tutorials:
- Principal tutorial per seguir el curs:
https://ajgallego.gitbooks.io/laravel-5/content/index.html
- https://scotch.io/tutorials/simple-laravel-crud-with-resource-controllers
- https://selftaughtcoders.com/from-idea-to-launch/lesson-23/laravel-5-application-form-model-binding-laravelcollective-forms-html-library-bootstrap-framework/
- Apunts del Sergi Coll: https://seicoll.github.io/DAW-M07-UF2-Apunts/
- https://styde.net/laravel-5/
Plugins:
- https://github.com/FrozenNode/Laravel-Administrator
- http://crudbooster.com/
- https://iamacoder.com/post/5-must-have-laravel-5-packages/
Referències:
- Instal·lació: https://laravel.com/docs/5.3/installation
- Getting Started amb Eloquent ORM: https://laravel.com/docs/5.3/eloquent
Instal·lació i setup
Instal·lació: https://laravel.com/docs/5.3/installation
Prerequisits:
- Cal PHP >= 5.6.4
- Si utilitzes Ubuntu 14 o menor actualitza la teva versió de PHP a la 7.0
- Calen els paquets següents:
$ sudo apt-get install php7.0-mbstring php7.0-zip php7.0-xml
Anem a posar-nos-hi. Utilitzarem Laravel v. 5.3, tot i que en futures versions les passes no haurien de diferir molt (però ho fan):
- Instal·la el gestor de paquets COMPOSER.
- Instal·la Laravel 5.3.
- Laravel s'instal·la a
$HOME/.composer
però per poder executar les properes comandes necessitarem tenir$HOME/.composer/vendor/bin
al nostre $PATH. Inserta això al teu$HOME/.profile
:PATH=$PATH:~/.composer/vendor/bin
- Laravel s'instal·la a
- Crea una app Laravel allà on et faci més ràbia:
$ laravel new laravelapp1
- o també:
$ composer create-project --prefer-dist laravel/laravel laravelapp1
- o també:
- Arrenca l'aplicació de prova:
$ php artisan serve
- Comprova la app amb el navegador a
http://localhost:8000
Incidències vàries
Aquest és un bon tutorial:
https://ajgallego.gitbooks.io/laravel-5/content/index.html
Igualment, podríem trobar algunes incidències. Us dono pistes:
Treballant amb GIT i clonant
Al pujar el projecte a un repo GIT, i clonar-lo després caldrà:
- Re-instal·lar les dependències:
$ composer install
- Regenerar arxiu
.env
: com que depèn de cada entorn no es fica al projecte (es posa a.gitignore
), però pots copiar i modificar de.env.example
- Error The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths. Es soluciona amb :
$ php artisan key:generate
Creant controllers
Per crear un controller complert, és més simple si ho fem com a RESOURCE. Ens crearà tots els mètodes i les rutes necessàries per a un CRUD.
- Ja no es pot fer amb
sinó amb:Route::controller
Route::resource("cosa","CosaController");
- Per exemple, per crear un controller per al model "Cosa" ho faríem amb -r (de resource):
$ php artisan make:controller -r CosaController
Treballant amb SQLITE
Per configurar la BD amb SQLITE cal crear el fitxer abans amb:
$ touch db.sqlite
Configurar la BD a .env:
DB_CONNECTION=sqlite DB_DATABASE=/path/absolut/al/db.sqlite
I creant la BD inicial amb:
$ php artisan migrate:install
Eliminant models o migracions
Si en algun moment heu afegit algun model o migració innecessàries, i les voleu esborrar, només cal esborrar l'arxiu pertinent i, seguidament, fer:
$ composer dump-autoload
...i es tornaran a generar els arxius d'autoload sense els arxius que volíem esborrar.
Quickstart per a fer un CRUD
Crear projecte:
$ laravel new proj1
Crear DB:
$ touch db.sqlite
Crear taules i migracions:
$ php artisan create:migration crea_taula_items --create=items
Crear models:
$ php artisan create:model Item
Editar la migració per crear les taules adequades.
Crear controllers amb els mètodes estàndard (index, create-store, show, edit-update, destroy):
$ php artisan make:controller -r ItemController
Crear rutes a routes/web.php
:
Route::resource("item","ItemController");
Crear plantilles per als mètodes (l'exemple diu "tema" enlloc de "item"):
$ php artisan route:list +--------+-----------+-----------------------+----------------+-----------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+-----------+-----------------------+----------------+-----------------------------------------------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | tema | tema.index | App\Http\Controllers\TemaController@index | web | | | POST | tema | tema.store | App\Http\Controllers\TemaController@store | web | | | GET|HEAD | tema/create | tema.create | App\Http\Controllers\TemaController@create | web | | | GET|HEAD | tema/{tema} | tema.show | App\Http\Controllers\TemaController@show | web | | | PUT|PATCH | tema/{tema} | tema.update | App\Http\Controllers\TemaController@update | web | | | DELETE | tema/{tema} | tema.destroy | App\Http\Controllers\TemaController@destroy | web | | | GET|HEAD | tema/{tema}/edit | tema.edit | App\Http\Controllers\TemaController@edit | web | +--------+-----------+-----------------------+----------------+-----------------------------------------------+--------------+
Crear les views (plantilles blade) adequades per a tots els mètodes necessaris: index, create-store, show, edit-update, destroy
Editar el codi del Controller per cridar pertinentment a les views.
Fent un projectet amb Laravel
Aquest és el projecte que he realitzat per entrenar-me, et pot servir d'exemple:
https://github.com/emieza/laravel-karaoke
Fes-li un cop d'ull al readme.md per veure com posar-lo en marxa.
MOLT IMPORTANT PEL PROJECTE: Cal crear un README.md (com per exemple aquest). No acceptaré cap projecte sense README.md
Per entrenar-vos amb el Markdown teniu aquest tester:
http://dillinger.io/
Anem per feina:
- Clarificar la idea de la funcionalitat que vols implementar.
- Clarificar la BD: mínim 2 taules i 1 relació (FK), màxim 3 taules i 2 relacions (per no fer el projecte massa llarg). En el meu cas, tinc:
- Taula "llistes"
- Taula "temes"
- Taula "vots"
- Clarificar les rutes que vols implementar per al projecte. En el meu cas, tinc:
- /llista/crea (GET per formulari + POST per store)
- /llista (index de llistes)
- /llista/{id} (show)
- /llista/{id}/crea (GET + POST, per crear temes en les llistes)
- /vota/{idtema}
- Crear rutes (veure exemple) a
routes/web.php
- Crear migració
$ php artisan create:migration taules
- Editar arxiu de migracions a
database/migrations
i afegir les noves taules al mètode up. Recorda posar els "drop" al mètode down. - Migrar, és a dir, crear la BD. Per fer-ho caldrà configurar:
- Crear el
.env
(copia'l del.env.example
) - Configurar el .env amb les dades de la teva BD (sqlite, mysql, etc.). Veure més amunt...
- Crear les dades a la BD:
$ php artisan migrate
- Crear el
- Crear Controllers. Posa -r si és un CRUD complert, si no, millor no:
$ php artisan make:controller -r ItemController
- Crear models. La majoria de casos estaran buits i no caldrà afegir-hi res a la classe:
$ php artisan create:model Item
- Això crearà
app/Item.php
. Al meu exemple (Llista.php) he modificat la $table ja que Laravel acostuma a assignar la taula amb el nom de la classe + "s" (plural). Com que en català fem "llista"->"llistes" (canviem la "a" per "e") el mètode automàtic falla i hem d'especificar-li que la seva taula és la "llistes" i no "llistas".
- Això crearà
- Afegir el codi necessari i plantilles:
- Codi: als Controllers pertinents. Mira't l'exemple de les llistes de karaoke.
- Plantilles: a resourcs/views/xxxx.blade.php . Mira't l'exemple un altre cop.
Laravel en producció
...