Diferència entre revisions de la pàgina «Laravel»

De Cacauet Wiki
Salta a la navegació Salta a la cerca
Línia 138: Línia 138:
 
#* Codi: als Controllers pertinents. Mira't l'[https://github.com/emieza/laravel-karaoke/blob/master/app/Http/Controllers/LlistaController.php exemple de les llistes de karaoke].
 
#* Codi: als Controllers pertinents. Mira't l'[https://github.com/emieza/laravel-karaoke/blob/master/app/Http/Controllers/LlistaController.php exemple de les llistes de karaoke].
 
#* Plantilles: a resourcs/views/xxxx.blade.php . Mira't l'[https://github.com/emieza/laravel-karaoke/tree/master/resources/views/llista exemple un altre cop].
 
#* Plantilles: a resourcs/views/xxxx.blade.php . Mira't l'[https://github.com/emieza/laravel-karaoke/tree/master/resources/views/llista exemple un altre cop].
 
<br>
 
 
== 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 <code>return "hola que tal"</code> 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 <code>Benvingut <nowiki>{{$nom}}</nowiki>,</code>, 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 (<code>http://localhost/ruta/?nom=manolo</code> , per exemple) i captura-la des da la ruta i introdueix-la a la view.
 
# Crear Models (a /app)
 
#* Laravel utilitza [https://laravel.com/docs/5.3/eloquent 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 [https://laravel.com/docs/5.3/database#configuration 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 [https://laravel.com/docs/5.3/eloquent#defining-models 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ó.
 
#* [https://laravel.com/docs/5.3/migrations#writing-migrations 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: <pre>$ touch db.sqlite</pre>
 
# 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
 
#* ...
 
  
 
<br>
 
<br>

Revisió del 12:02, 4 feb 2017

Intro i referències

Laravel és un framework web per a PHP que està agafant molta força.

Tutorials:

Plugins:

Referències:


Instal·lació i setup

Instal·lació: https://laravel.com/docs/5.3/installation

Prerequisits:

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):

  1. Instal·la el gestor de paquets COMPOSER.
  2. 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
  3. 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
  4. Arrenca l'aplicació de prova:
    $ php artisan serve
  5. 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à:

  1. Re-instal·lar les dependències:
    $ composer install
  2. 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
  3. 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.

  1. Ja no es pot fer amb Route::controller sinó amb:
    Route::resource("cosa","CosaController");
  2. 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.

Passes recomanades:

  1. Clarificar la idea de la funcionalitat que vols implementar.
  2. 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"
  3. 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)
    • /llista/vota/{idtema}
  4. Crear rutes (veure exemple) a
    routes/web.php
  5. Crear migració
    $ php artisan create:migration taules
  6. Editar arxiu de migracions a database/migrations i afegir les noves taules al mètode up. Recorda posar els "drop" al mètode down.
    Exemple de migració i creació de taules.
  7. Crear Controllers. Posa -r si és un CRUD complert, si no, millor no:
    $ php artisan make:controller -r ItemController
  8. 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".
  9. Afegir el codi necessari i plantilles:


Laravel en producció

...