Exemple de creació d'un projecte Laravel sense complicacions
Crear un nou projecte Laravel:
composer create-project --prefer-dist laravel/laravel test
Provar que funciona:
php artisan serve
Ara modificarem les variables d'entorn per apuntar a la nostra base de dades en local. Suposarem que voldrem tenir una BD anomenada Institut on dins tindrem la taula Alumnes per la gestió d'aquests.
Crea tu mateix/a la base de dades Institut usant phpMyAdmin per exemple.
nano .env
Ja que hem configurat la BD, podem generar el Model per l'objecte Alumnes:
php artisan make:model Alumne --migration
Ara modifiquem l'arxiu de migracions i afegim alguns camps més:
nano database/migrations/[arxiu de migració]
Afegirem els camps nom, cognoms i data_naixement:
$table->string('nom');
$table->string('cognoms');
$table->date('data_naixement');
Provem que la migració funciona correctament i que l'aplicació és capaç de trobar la BD:
php artisan migrate
Si tot ha anat bé haurem de tenir la taula d'alumnes (i les altres que Laravel ens inclou per defecte) a la nostra base de dades:
Per no haver d'entrar manualment dades de prova, utilitzarem les Factories i els Seeders que ens brinda Laravel.
Creem una Factory per l'objecte Alumne:
php artisan make:factory AlumneFactory --model=Alumne
Editem aquesta Factory per dir-li quines dades s'ha d'inventar:
nano database/factories/AlumneFactory.php
I fem que s'inventi el nom, els cognoms i la data de naixement:
public function definition()
{
return [
"nom" => $this->faker->firstName,
"cognoms" => $this->faker->lastName . " " . $this->faker->lastName,
"data_naixement" => $this->faker->date($format = 'Y-m-d', $max = 'now')
];
}
Ara cal editar la classe Seeders per dir-li quants objectes s'ha d'inventar:
nano database/seeders/DatabaseSeeder.php
A la capçalera de la classe hem d'importar el model Alumne:
use App\Models\Alumne;
I dins de la funció run() li hem de dir quants alumnes s'ha d'inventar:
Alumne::factory()->times(50)->create();
Ara cal llençar la comanda que ens omplirà la taula Alumnes de dades aleatòries:
php artisan db:seed
Si tot ha anat bé ja tindrem 50 alumnes creats amb dades aleatòries:
Ara crearem el controlador d'Alumnes. Serà un controlador molt bàsic on en la seva funció index() ens recuperarà el llistat de tots els alumnes i ens l'enviarà a una vista:
php artisan make:controller AlumneController --resource
nano app/Http/Controllers/AlumneController.php
Recorda importar el model:
use App\Models\Alumne;
Modifiquem la funció index() perquè quedi així:
public function index()
{
$alumnes = Alumne::paginate(10);
return view("alumne", compact("alumnes"));
}
Tot seguit haurem de crear la vista
nano resources/views/alumne.blade.php
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Styles -->
<link href="{{ mix('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<main class="container">
<div>
<div>
<div class="text-center my-3">
<h1>{{ __("Llistat d'alumnes") }}</h1>
</div>
</div>
<table class="table">
<thead>
<tr>
<th scope="col">{{ __("Id") }}</th>
<th scope="col">{{ __("Nom") }}</th>
<th scope="col">{{ __("Cognoms") }}</th>
<th scope="col">{{ __("Data naixement") }}</th>
</tr>
</thead>
<tbody>
@forelse($alumnes as $alumne)
<tr>
<td>{{ $alumne->id }}</td>
<td>{{ $alumne->nom }}</td>
<td>{{ $alumne->cognoms }}</td>
<td>{{ date_format(new DateTime($alumne->data_naixement), "d/m/Y") }}</td>
</tr>
@empty
<tr>
<td colspan="4">
<div>
<p><strong>{{ __("No hi ha alumnes") }}</strong></p>
<span>{{ __("No hi ha cap dada a mostrar") }}</span>
</div>
</td>
</tr>
@endforelse
</tbody>
</table>
<div class="d-flex justify-content-center">
{{ $alumnes->links() }}
</div>
</div>
</main>
</div>
</body>
</html>
Finalment canviarem l'enrutament per defecte, i en comptes d'anar a buscar la vista welcome anirem a buscar el controlador AlumneController:
nano routes/web.php
Route::resource('/', AlumneController::class);
Recorda també d'importar el controlador, sinó el sistema no el trobarà:
use App\Http\Controllers\AlumneController;
Ja tenim la nostra aplicació acabada. Si anem a veure com ens ha quedat veiem quelcom semblant a:
És correcte, però no té cap tipus d'estil. Anem a posar-hi bootstrap. A l'arrel del projecte executem:
composer require laravel/ui
I tot seguit:
php artisan ui bootstrap
Finalment empaquetem l'aplicació:
npm install && run production
Si ho hem fet bé quedaria semblant a:
Si veus que la paginació no es veu de forma correcta, cal indicar-li a Laravel que ha de fer servir bootstrap. Edita app/Providers/AppServiceProvider.php
perquè quedi així:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Paginator::useBootstrap();
}
}