Installation des outils nécessaires
La structure MVC signifie que l’application est divisée en trois parties. Le (M) modèle définit le modèle de données, (V) vue présente les données et (C) contrôleur définit la logique et manipule les données.
Contrôleurs
Voici un lien vers la section sur les contrôleurs de la documentation officielle : https://laravel.com/docs/9.x/controllers
Contrôleurs de base
Un contrôleur est un endroit où vous organisez les comportements de votre application. Par exemple, lorsque le routeur reçoit « /
« , il renvoie un « IndexController
« .
Le « IndexController
» récupère les informations requises dans la base de données par l’intermédiaire d’un modèle, puis les place dans l’emplacement correspondant d’une vue, et enfin renvoie la vue au navigateur.
C’est l’utilisation la plus basique d’un contrôleur. Bien sûr, il peut faire beaucoup plus que cela, et j’en parlerai lorsque nous rencontrerons des problèmes spécifiques plus tard dans le tutoriel.
Pour créer notre premier contrôleur. Allez dans le terminal, tapez :
php artisan make:controller IndexController
Allez à app/Http/Controllers/
et vous trouverez un IndexController.php
<?php
namespace App\Http\Controllers;
use IlluminateHttpRequest;
class IndexController extends Controller
{
//
}
Notez que le contrôleur étend la classe de contrôleur de base incluse dans Laravel. La classe de base fournit quelques méthodes pratiques telles que la propriété $middleware
.
Nous pouvons essayer de lui faire retourner une chaîne de caractères en créant une fonction dans la classe :
class IndexController extends Controller
{
//
public function index()
{
return 'C\'est mon contrôleur IndexController';
}
}
Nous avons créé une méthode appelée index()
et dans cette méthode, nous retournons une chaîne de caractères « C’est mon contrôleur IndexController« .
Afin de tester notre code, nous devons faire en sorte qu’un routeur renvoie le « IndexController
« . Retournez à web.php
et créez un nouveau routeur comme ceci :
use App\Http\Controllers\IndexController;
Route::get('/', [IndexController::class, 'index']);
Remarquez que le deuxième argument n’est plus une fonction, c’est [IndexController::class, 'index']
ce qui signifie qu’il faut aller à l’adresse IndexController
trouver le index()
et exécute ce qu’elle contient.
Dans le navigateur, allez à http://localhost:8000
Nous pouvons également faire en sorte que le IndexController
pour retourner une vue.
class IndexController extends Controller
{
//
public function index()
{
return view('welcome');
}
}
Rafraîchissez le navigateur, cela nous permettra d’obtenir le même résultat que dans l’article précédent :
Contrôleurs à action unique
Les contrôleurs à action unique sont utiles lorsque nous n’avons besoin que d’une seule méthode dans la classe du contrôleur :
class IndexController extends Controller
{
//
public function __invoke()
{
return view('welcome');
}
}
Maintenant, nous pouvons modifier la route que nous venons de définir. Nous n’avons plus besoin de spécifier la méthode.
Route::get('/', IndexController::class);
Ce code fonctionnera exactement de la même manière que précédemment.
Vues ( Template Blade )
Réexaminons la vue welcome.blade.php
vous remarquerez qu’il s’agit simplement d’un fichier HTML. Oui, les vues sont basées sur HTML et CSS puisque c’est ce que vous voyez dans le navigateur, mais les choses sont légèrement plus compliquées que cela.
S’il ne contient que des codes HTML, le blog entier serait statique, et ce n’est pas ce que nous voulons. La vue devrait donc « dire » au contrôleur où placer les données qu’il a récupérées.
Héritage des templates
Définir une mise en page principale
Le principal avantage de l’utilisation du modèle Blade est que nous n’avons pas besoin d’écrire le même code encore et encore. Créons un master.blade.php
dans le dossier templates.
<html>
<head>
@yield('meta')
</head>
<body>
@section('sidebar')
<div class="container">
@yield('content')
</div>
</body>
</html>
Remarquez les deux directives @section
et @yield
. Le site @section('sidebar')
signifie que Laravel cherchera un modèle de lame nommé « sidebar.blade.php
« , et l’importera ici. Le site @yield
est utilisée pour afficher le contenu d’une section donnée.
Étendre une mise en page
Ici, nous créons une autre vue index.blade.php
.
@extends('master')
@section('meta')
<meta charset="UTF-8">
<meta name="description" content="Tutoriel Laravel 9 gratuit">
<meta name="keywords" content="HTML, CSS, JavaScript">
<meta name="author" content="John Doe">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@endsection
@section('content')
<p>Corps du contenu.</p>
@endsection
Lorsque cette vue est appelée, Laravel recherche le fichier master
le modèle de lame que nous venons de créer. Remplacer @yield('meta')
par le meta
et remplacer @yield('content')
par la section du contenu.
Avec ces deux directives, nous sommes en mesure de construire n’importe quel type de hiérarchie de modèles que nous voulons.
Syntaxe
Affichage des données
Commençons par apporter quelques modifications à notre IndexController :
class IndexController extends Controller
{
//
public function __invoke()
{
return view('index', ['name' => 'Damien']);
}
}
nous avons défini une variable name
ici, et sa valeur est Damien
. N’oubliez pas que c’est également la nouvelle syntaxe de Laravel 9.
Dans la vue de l’index, nous changeons la section du contenu en ceci :
<p>Bonjour, {{ $name }}.</p>
Le résultat sera Bonjour, Damien.
.
Condition "If"
Vous pouvez construire if
en utilisant l’option @if
, @elseif
, @else
et @endif
et@endif
. Ces directives fonctionnent de la même manière que leurs équivalents en PHP :
@if (count($records) === 1)
J'ai un résultat
@elseif (count($records) > 1)
J'ai plusieurs résultats
@else
Je n'ai pas de résultat
@endif
Condition "switch"
Les instructions de commutation peuvent être construites en utilisant la fonction @switch
, @case
, @break
, @default
et @endswitch
directives :
@switch($i)
@case(1)
Premier cas
@break
@case(2)
Deuxième cas
@break
@default
Cas par défaut
@endswitch
Boucles "for", "foreach", "while"
En plus des instructions conditionnelles, Blade fournit des directives simples pour travailler avec les structures de boucles de PHP. Encore une fois, chacune de ces directives fonctionne de manière identique à leurs homologues PHP :
@for ($i = 0; $i < 10; $i++)
Le résultat actuel est {{ $i }}
@endfor
@foreach ($users as $user)
<p>L'utilisateur : {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>Pas d'utilisateur</p>
@endforelse
@while (true)
<p>Boucle infinie.</p>
@endwhile
Modèles
Vous vous souvenez que j’ai dit que les contrôleurs sont chargés de récupérer les données de la base de données ? Eh bien, c’est là que les modèles interviennent.
Chaque table de la base de données a un « Modèle » correspondant, et ce modèle va gérer toutes les interactions avec la table.
Définir les modèles
La manière la plus simple de créer une instance de modèle est d’utiliser la fonction make:model
Commande Artisan :
php artisan make:model Test
Si vous souhaitez générer les fichiers de migration correspondants, vous pouvez utiliser la commande --migration
ou -m
option :
php artisan make:model Test --migration
php artisan make:model Test -m
Voici un exemple de modèle et de fichier de migration :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Test extends Model
{
//
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTestsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tests', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('tests');
}
}
Nous n’entrerons pas dans les détails pour l’instant car cela peut être assez déroutant pour les débutants mais sachez que le fichier de migrations permettra à Laravel de créer la table directement dans votre base de données et le modèle est la classe qui communiquera directement avec cette table.
Tutoriel Laravel 9
Newsletter
Ne manquez jamais les nouveaux conseils, tutoriels et autres.
Pas de spam, jamais. Nous ne partagerons jamais votre adresse électronique et vous pouvez vous désabonner à tout moment.