Diferència entre revisions de la pàgina «Laravel»
| Línia 70: | Línia 70: | ||
|   $ composer dump-autoload |   $ composer dump-autoload | ||
| ...i es tornaran a generar els arxius d'autoload sense els arxius que volíem esborrar. | ...i es tornaran a generar els arxius d'autoload sense els arxius que volíem esborrar. | ||
| + | |||
| + | <br> | ||
| + | |||
| + | == 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 | ||
| + | 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 <code>routes/web.php</code>: | ||
| + |  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. | ||
| <br> | <br> | ||
Revisió del 16:58, 31 gen 2017
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/.composerperò per poder executar les properes comandes necessitarem tenir$HOME/.composer/vendor/binal 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 ahttp://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 Route::controllerRoute::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
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.
Ficant-nos en matèria
Ja hem fet la presa de contacte. Ara procedim a crear la nostra app. Això inclourà:
- Crear Routes (a /routes/)
- https://laravel.com/docs/5.3/routing
- Comença per una ruta simple i fes un return "hola que tal"i mira si pots visualitzar-la.
 
- Crear Views (a /resources/views)
- Consulta els apartats de VIEWS & TEMPLATES de la doc.
- Crea una view i crida-la des d'una ruta.
- Posa a la view Benvingut {{$nom}},, i introdueix el teu nom des de la ruta (hardcoded).
- Per passar paràmetres a la pàgina, consulta la secció REQUESTS de la documentació.
- Passa un paràmetre "nom" per GET (http://localhost/ruta/?nom=manolo, per exemple) i captura-la des da la ruta i introdueix-la a la view.
 
- Crear Models (a /app)
- Laravel utilitza Eloquent ORM. Recordem que un ORM és un Object-Relational Model, una sèrie d'utilitats que ens ajudaran a gestionar l'accés a la base de dades i els models d'objectes que hi guardarem.
- Configurar la connexió a la BD en .env tal i com indica la doc (en algun lloc diu que es configura a config/database.php, però és millor fer-ho a .env)
- Segueix el Eloquent Quickstart i defineix els models de la teva app. Tingues en compte:
- A l'exemple que surt (User model) ja està creat i et donarà un error. Crea un altre objecte diferent.
- A diferència de Django, al model només es defineixen els atributs però sense especificar de quin tipus son (integers, varchars, etc.). Això darrer ho farem en el següent pas: la migració.
 
- Migrar els models a la BD.
- Tal com hem dit, en aquest pas caldrà definir el tipus de dades de l'objecte.
- Es recomana configurar la DB amb sqlite els primers cops per provar, és més senzill. Si et dóna un error que 'db.sqlite' no existeix, simplement fes primer: $ touch db.sqlite 
 
 
- Utilitzar els models a les views
- Crea una ruta que afegeixi instàncies hardcoded, és a dir, que faci un new del objecte i els guardi amb save.
- Crida aquesta ruta diversos cops per ficar les dades dins la BD.
- Fes ara una view que llisti els continguts dels objectes que has creat. Necessitaràs aconseguir una col·lecció sencera dels items (mira l'apartat de Eloquent ORM) i també com fer loops dins de les views.
 
- Crea Controllers
- ...
 
Laravel en producció
...

