Laravel

De Cacauet Wiki
Salta a la navegació Salta a la cerca

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 make:migration crea_taula_items --create=items

Crear models:

$ php artisan make: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. El pots veure en producció aquí: https://jolgorio.tk

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:

  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)
    • /vota/{idtema}
  4. Crear rutes (veure exemple) a
    routes/web.php
  5. Crear migració
    $ php artisan make: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. 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
  8. Crear Controllers. Posa -r si és un CRUD complert, si no, millor no:
    $ php artisan make:controller -r ItemController
  9. Crear models. La majoria de casos estaran buits i no caldrà afegir-hi res a la classe:
    $ php artisan make: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".
  10. Afegir el codi necessari i plantilles:


Laravel en producció

Bàsicament podem distingir 2 tipus de desplegaments:

És important en ambdós casos remarcar:

  • No mostrar mai els arxius interns de laravel, només cal publicar el contingut de /public
  • Es requereix el mòdul mod_rewrite d'Apache (o Nginx)
  • Cal activar els arxius .htaccess , afegint la directiva AllowOverride all

A l'arxiu de conf. del nostre VirtualHost (a /etc/apache2/sites-available):

<Directory /var/www/>
     AllowOverride All
</Directory>