Framework Laravel

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

Instal·lació

$ php -v
PHP 7.2.24-0ubuntu0.18.04.4 (cli) 

Instal·lo les dependències que es comenten: php-bcmath, php-gd, etc

Primer de tot, es necessita composer com a sistema d'instal·lació i resolució de dependències a PHP:

$ sudo apt-get install composer

i ara ja puc instal·lar Laravel, de forma global:

$ composer global require laravel/installer

$ export PATH=$PATH:$HOME/.config/composer/vendor/bin

I ara ja puc crear un projecte de Laravel. Ho faig amb composer:

$ composer create-project --prefer-dist laravel/laravel blog

Local Development Server:

If you have PHP installed locally and you would like to use PHP's built-in development server to serve your application, you may use the serve Artisan command. This command will start a development server at http://localhost:8000:

$ cd blog
$ php artisan serve
Laravel development server started: http://127.0.0.1:8000

i efectivament ja tinc l'aplicatiu funcionant a:

Public Directory: public/

After installing Laravel, you should configure your web server's document / web root to be the public directory. The index.php in this directory serves as the front controller for all HTTP requests entering your application.

Tanmateix, si mirem dins del fitxer public/index.php no s'entén res. La clau està en el directori routes/web.php, on es defineixen les rutes que té l'aplicatiu.

Tutorial ràpid

Laravel tutorial.png

Seguim aquest video de Youtube de 45 minuts i reproduim els exercicis, LARAVEL essentials you need to know in 45 minutes:

$ joe .env

aquí és on hi ha la informació de la connexió a la base de dades.

Per arrencar el servidor:

$ php artisan serve
Laravel development server started: http://127.0.0.1:8000

I compte! El Laravel funciona amb el seu propi servidor web. Si tinc l'Apache tancat, també funciona.

El primer fitxer important és el routes/web.php, on hi ha la línia:

Route::get('/', function () {
    return view('welcome');
});

La vista welcome éstà a resources/welcome.blade.php, i aquí puc veure tot el contingut de la pàgina de presentació de Laravel.

Si afegeixo aquestes línies:

Route::get('/about', function () {
    echo "hola";
});

Per tant, el web.php funciona com una llista de totes les pàgines que tinc en l'aplicació.

Controladors

$ php artisan make:controller HomeController
Controller created successfully.

El trobem a App/Http/Controllers/HomeController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    //
}

Defineixo la funció index que retorna la vista welcome,

class HomeController extends Controller
{
    public function index() {
    	return view('welcome');
    }
}

i ara, a web.php, com a punt d'entrada posem:

Route::get('/','HomeController@index');

El resultat és el mateix, però estem visualitzant la portada a través d'un controlador.

Models (accés a bases de dades)

$ php artisan make:model Message
Model created successfully.

El trobem a app/Message.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    //
}

Eloquent és el sistema que fa servir Laravel per accedir a les bases de dades. Si vull crear taules per guardar la informació dels missatges que crearé en la meva mini-aplicació, he de fer una migration:

$ php artisan make:migration create_messages_table
Created Migration: 2020_05_08_134106_create_messages_table

Aquesta migració la trobem a blog/database/migrations. Tenim dues funcions: up() és per crear les taules; i down() és per esborrar les taules.

En la funció up() definirem tots els camps de la taula. Queda de la següent manera:

    public function up()
    {
        Schema::create('messages', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('content');
            $table->timestamps();
        });
    }

Ja podem fer el migrate, i ja podem veure la taula en el mysql:

Una coseta abans. Si vull connectar-me al mysql com a joan i no com a root, primer hauré de fer:

GRANT ALL PRIVILEGES ON *.* TO 'joan'@'localhost' IDENTIFIED BY 'password';

i ara ja puc connectar-me:

joan@joanHP:~$ mysql -u joan -p jbalmes
mysql>

Això és important perquè la comanda següent s'executa com a joan (recordar que llegeix les credencials per accedir a la base de dades de .env)

Faig la migració:

$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.68 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (1.26 seconds)
Migrating: 2020_05_08_134106_create_messages_table
Migrated:  2020_05_08_134106_create_messages_table (1.39 seconds)

Ja tinc la taula creada:

mysql> desc messages;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

Si vull eliminar les taules farem:

$ php artisan migrate:reset

Creo la vista master (script master.blade.php) per mostrar els meus missatges

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>@yield('title')</title>

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">

    </head>
    <body>
        @yield('content')
    </body>
</html>

i també la vista home (script home.blade.php)

@extends('master')
@section('title','Homepage')
@section('content')
	<h1>Content</h1>
@endsection

i ara com a punt d'entrada (HomeController.php) retorno la vista home que acabo de crear, que tindrà per missió mostrar els missatges.

class HomeController extends Controller
{
    public function index() {
    	return view('home');
    }
}

Necessito un parell de dades:

mysql> insert into messages(title,content,created_at) values('mis1', 'content mis 1',now());
mysql> insert into messages(title,content,created_at) values('mis2', 'content mis 2',now());

i ara ja puc recuperar els missatges:

class HomeController extends Controller
{
    public function index() {
    	$messages = Message::all();
    	foreach ($messages as $message) {
    		echo $message->title;
    	}die;

    	return view('home');
    }
}

A la vista home li puc passar tots els missatges que retorna el controlador:

class HomeController extends Controller
{
    public function index() {
    	$messages = Message::all();

    	return view('home', [
    		'messages' => $messages
    	]);
    }
}

i la manera com els processa la vista home és:

@extends('master')
@section('title','Homepage')
@section('content')
	Recent messages:
	<ul>
		@foreach($messages as $message)
		<li><strong>{{$message->title}}</strong>
			<br />
			{{$message->content}}
			<br />
			<!-- {{ $message->created_at->format('d/m/Y') }} -->
			{{$message->created_at->diffForHumans()}}
		</li>
		@endforeach
	</ul>
@endsection

Ara creem el formulari per introduir nous missatges:

<form action="/create" method="post">...</form>

creo un controlador per a processar els missatges

$ php artisan make:controller MessageController

i creo una nova pàgina (ruta) on s'executarà el codi del controlador:

Route::post('/create','MessageController@create');

(fixem-nos que utilitza el mètode post)

El tutorial s'acaba aconseguint que es creïn els missatges en el submit del formulari, i retorna a la pàgina principal (/) on es veu l'últim missatge creat.

Finalment, es podem visualitzar els missatges amb la vista message/{id}, i es crea un link per visualitzar aquesta vista.


creat per Joan Quintana Compte, maig 2020

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines