Laravel Résumé
Models Migration Relation
Introduction Installation Projet:Structure Strucutre,model,migration Migration,Models,Relation Artisan CLI
Les Relations
BelongsTo HasOne HasMany BelongsToMany HasManyThrough
Exemples des Relations
Relations:oneToMany,ManyToMany... Relations:Exemples
Exercices
Exercice 1 Exercice 2
Controllers Views Routes
Routes,Controller,Model,view
Les Routes
Définir:Routes Routes avec Paramètres Routes nommées Groupes de routes
Les Controllers
Les Controllers Les Contrôleurs de Ressources
Les Vues
Vues et Blade Templates Blade Layouts et Sections Sous-vues Composants et Slots Contrôles de flux
MVC :CRUD
CRUD: Produit CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
ORM:Eloquent
Exemple :Transport
Api:Laravel +React
Middleware

Seeders & Factories
Exemples :EFM

Authenfication
Queue,job,task
TP:Schools Management
Authenfication:React
Layouts
Exercices





Exercices corrigé

Exercice 1


Examen Pratique de Fin de Module - Backend Laravel

Durée : 3 heures


Instructions :

  • Vous disposez de 3 heures pour terminer cet examen.
  • Vous êtes autorisé à utiliser la documentation officielle de Laravel ainsi que tout autre matériel de référence que vous jugez nécessaire.
  • Assurez-vous de nommer correctement vos fichiers et classes.
  • Pour chaque question, assurez-vous de respecter les conventions de codage et de fournir une solution fonctionnelle.

Question 1 : Configuration de l'environnement

Créez un nouveau projet Laravel nommé "ExamenBackend". Assurez-vous de configurer la base de données et de créer une migration pour une table "utilisateurs" avec les champs suivants :

  • id (clé primaire)
  • nom
  • email
  • mot_de_passe

Question 2 : Authentification

  1. Créez un modèle "Utilisateur" associé à la table "utilisateurs".
  2. Implémentez l'authentification des utilisateurs en utilisant le système d'authentification par défaut de Laravel.
  3. Créez une route "/mon-compte" protégée qui affiche les informations de l'utilisateur connecté.

Question 3 : Gestion des Articles

  1. Créez une migration pour une table "articles" avec les champs suivants :

    • id (clé primaire)
    • titre
    • contenu
    • utilisateur_id (clé étrangère vers la table utilisateurs)
  2. Créez un modèle "Article" associé à la table "articles".

  3. Créez un contrôleur "ArticleController" avec les méthodes suivantes :

    • index : Affiche la liste des articles.
    • créer : Affiche un formulaire pour créer un nouvel article.
    • enregistrer : Enregistre un nouvel article dans la base de données.
    • afficher : Affiche les détails d'un article spécifique.

Question 4 : Relations entre les Modèles

  1. Définissez la relation "un utilisateur a plusieurs articles" dans le modèle Utilisateur.
  2. Modifiez la méthode "index" du contrôleur "ArticleController" pour afficher uniquement les articles de l'utilisateur connecté.

Question Bonus : API RESTful

Créez une API RESTful pour les articles avec les fonctionnalités suivantes :

  • Afficher la liste des articles (GET).
  • Afficher les détails d'un article spécifique (GET).
  • Créer un nouvel article (POST).
  • Mettre à jour un article existant (PUT/PATCH).
  • Supprimer un article (DELETE).

Soumission :

  • Créez un fichier texte nommé "Réponses.txt" contenant les réponses à toutes les questions.
  • Comprimez le projet Laravel dans un fichier zip nommé "ExamenBackend.zip" comprenant également le fichier "Réponses.txt".

Bon travail !

Question 1 : Configuration de l'environnement

# Créer un nouveau projet Laravel
laravel new ExamenBackend

# Créer une migration pour la table "utilisateurs"
php artisan make:migration create_users_table --create=users
Dans le fichier de migration create_users_table.php :

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->timestamps();
    });
}
Question 2 : Authentification

# Créer le modèle Utilisateur
php artisan make:model User

# Implémenter l'authentification
php artisan make:auth

# Créer une route protégée
Route::get('/mon-compte', 'HomeController@monCompte')->middleware('auth');
Dans le contrôleur HomeController :

public function monCompte()
{
    return view('mon-compte');
}
Question 3 : Gestion des Articles

# Créer une migration pour la table "articles"
php artisan make:migration create_articles_table --create=articles
Dans le fichier de migration create_articles_table.php :

public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->id();
        $table->string('titre');
        $table->text('contenu');
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->timestamps();
    });
}
Dans le contrôleur ArticleController :

public function index()
{
    $articles = auth()->user()->articles;
    return view('articles.index', compact('articles'));
}
Question 4 : Relations entre les Modèles
Dans le modèle User :

public function articles()
{
    return $this->hasMany(Article::class);
}
Question Bonus : API RESTful

Dans le contrôleur ArticleController :

php
Copy code
// Afficher la liste des articles
public function index()
{
    return response()->json(auth()->user()->articles);
}

// Afficher les détails d'un article spécifique
public function show($id)
{
    $article = Article::findOrFail($id);
    return response()->json($article);
}

// Créer un nouvel article
public function store(Request $request)
{
    $article = new Article();
    $article->titre = $request->titre;
    $article->contenu = $request->contenu;
    $article->user_id = auth()->id();
    $article->save();

    return response()->json($article, 201);
}

// Mettre à jour un article existant
public function update(Request $request, $id)
{
    $article = Article::findOrFail($id);
    $article->titre = $request->titre;
    $article->contenu = $request->contenu;
    $article->save();

    return response()->json($article, 200);
}

// Supprimer un article
public function destroy($id)
{
    $article = Article::findOrFail($id);
    $article->delete();

    return response()->json(null, 204);
}

Exercice 2

Examen de Fin de Formation - Backend Laravel

Question 1 : Migration et Seed

  1. Créez une migration pour une table "produits" avec les champs suivants :

    • id (clé primaire)
    • nom
    • prix
    • description
  2. Créez un seeder pour insérer quelques produits factices dans la base de données.


Question 2 : Modèles et Relations

  1. Créez un modèle "Produit" associé à la table "produits".

  2. Définissez une relation "many-to-many" entre les modèles "Produit" et "Utilisateur", représentant les produits préférés des utilisateurs.


Question 3 : Contrôleurs et Vues

  1. Créez un contrôleur "ProduitController" avec les méthodes suivantes :

    • index : Affiche la liste des produits.
    • créer : Affiche un formulaire pour créer un nouveau produit.
    • enregistrer : Enregistre un nouveau produit dans la base de données.
  2. Créez une vue pour afficher la liste des produits avec leurs détails.


Question 4 : Middleware

  1. Créez un middleware nommé "VérificationAdmin" qui vérifie si l'utilisateur actuel est un administrateur.

  2. Appliquez ce middleware pour protéger la route de création de nouveaux produits dans le contrôleur "ProduitController".


Question 5 : API RESTful

  1. Créez une API RESTful pour les produits avec les fonctionnalités suivantes :
    • Afficher la liste des produits (GET).
    • Afficher les détails d'un produit spécifique (GET).
    • Créer un nouveau produit (POST).
    • Mettre à jour un produit existant (PUT/PATCH).
    • Supprimer un produit (DELETE).

Question Bonus : Tests Unitaires

  1. Écrivez des tests unitaires pour les méthodes principales du contrôleur "ProduitController" (index, créer, enregistrer).

  2. Utilisez le système de tests de Laravel pour exécuter les tests et vérifiez que toutes les fonctionnalités sont correctement implémentées.


Soumission :

  • Créez un fichier texte nommé "Réponses.txt" contenant les réponses aux questions théoriques et les détails des étapes pratiques.
  • Comprimez le projet Laravel dans un fichier zip nommé "ExamenBackend.zip" comprenant également le fichier "Réponses.txt".

Bon travail !

Question 1 : Migration et Seed
Créez une migration pour une table "produits" avec les champs suivants :

php artisan make:migration create_produits_table --create=produits
Dans le fichier de migration create_produits_table.php :

public function up()
{
    Schema::create('produits', function (Blueprint $table) {
        $table->id();
        $table->string('nom');
        $table->decimal('prix', 8, 2);
        $table->text('description');
        $table->timestamps();
    });
}
Créez un seeder pour insérer quelques produits factices dans la base de données.
php artisan make:seeder ProduitsTableSeeder
Dans le seeder ProduitsTableSeeder.php, ajoutez la logique pour insérer des données dans la table "produits".
public function run()
{
    DB::table('produits')->insert([
        [
            'nom' => 'Produit 1',
            'prix' => 10.99,
            'description' => 'Description du Produit 1',
            'created_at' => now(),
            'updated_at' => now(),
        ],
        // Ajoutez d'autres produits ici...
    ]);
}
Exécutez le seeder :

php artisan db:seed --class=ProduitsTableSeeder
Question 2 : Modèles et Relations
Créez un modèle "Produit" associé à la table "produits".

php artisan make:model Produit
Dans le modèle Produit.php, définissez la relation "many-to-many" avec le modèle "Utilisateur".

public function utilisateurs()
{
    return $this->belongsToMany(Utilisateur::class);
}
Définissez une relation "many-to-many" entre les modèles "Produit" et "Utilisateur" dans le modèle "Utilisateur".

public function produits()
{
    return $this->belongsToMany(Produit::class);
}
Question 3 : Contrôleurs et Vues
Créez un contrôleur "ProduitController" avec les méthodes suivantes :

php artisan make:controller ProduitController
Dans le contrôleur ProduitController.php, ajoutez les méthodes index, créer et enregistrer.

use App\Produit;

public function index()
{
    $produits = Produit::all();
    return view('produits.index', compact('produits'));
}

public function create()
{
    return view('produits.create');
}

public function enregistrer(Request $request)
{
    Produit::create($request->all());
    return redirect()->route('produits.index');
}
Créez une vue pour afficher la liste des produits avec leurs détails. Dans la vue index.blade.php :

@foreach($produits as $produit)
    <div>
        <h2>{{ $produit->nom }}</h2>
        <p>{{ $produit->prix }}</p>
        <p>{{ $produit->description }}</p>
    </div>
@endforeach
Question 4 : Middleware
Créez un middleware nommé "VérificationAdmin" qui vérifie si l'utilisateur actuel est un administrateur.

php artisan make:middleware VerifierAdmin
Dans le middleware VerifierAdmin.php, ajoutez la logique de vérification de l'administrateur.

public function handle($request, Closure $next)
{
    if (!auth()->user()->isAdmin()) {
        abort(403, 'Accès non autorisé');
    }

    return $next($request);
}
Appliquez ce middleware pour protéger la route de création de nouveaux produits dans le contrôleur "ProduitController".

use App\Http\Middleware\VerifierAdmin;

public function __construct()
{
    $this->middleware(VerifierAdmin::class)->only('create', 'enregistrer');
}
Question 5 : API RESTful
Créez une API RESTful pour les produits dans le contrôleur "ProduitController" en utilisant les méthodes index, show, store, update et destroy.

use App\Produit;
use Illuminate\Http\Request;

public function index()
{
    return Produit::all();
}

public function show($id)
{
    return Produit::findOrFail($id);
}

public function store(Request $request)
{
    return Produit::create($request->all());
}

public function update(Request $request, $id)
{
    $produit = Produit::findOrFail($id);
    $produit->update($request->all());
    return $produit;
}

public function destroy($id)
{
    Produit::findOrFail($id)->delete();
    return response()->json(null, 204);
}
Question Bonus : Tests Unitaires
Écrivez des tests unitaires pour les méthodes principales du contrôleur "ProduitController".

use Tests\TestCase;
use App\Produit;

class ProduitControllerTest extends TestCase
{
    public function testIndex()
    {
        $response = $this->get('/produits');
        $response->assertStatus(200);
    }

    public function testStore()
    {
        $response = $this->post('/produits', [
            'nom' => 'Nouveau Produit',
            'prix' => 15.99,
            'description' => 'Description du Nouveau Produit',
        ]);
        $response->assertStatus(200);
        $this->assertDatabaseHas('produits', ['nom' => 'Nouveau Produit']);
    }
}
Exécutez les tests :

php artisan test

Exercice 3

  1. Créez une migration pour une table "utilisateurs" avec les champs suivants :

    • id (clé primaire)
    • nom
    • email
    • mot_de_passe
    • isAdmin (un booléen pour déterminer si l'utilisateur est un administrateur)
  2. Créez une migration pour une table "produits" avec les champs suivants :

    • id (clé primaire)
    • nom
    • prix
    • quantité_en_stock
  3. Créez une migration pour une table "commandes" avec les champs suivants :

    • id (clé primaire)
    • numéro_commande
    • date
    • utilisateur_id (clé étrangère vers la table utilisateurs)
  4. Créez une migration pour une table pivot "commande_produit" pour enregistrer les produits associés à chaque commande, ainsi que la quantité commandée de chaque produit.

  5. Créez des seeders pour insérer des données factices dans les tables utilisateurs, produits et commandes.


Question 2 : Modèles et Relations

  1. Créez un modèle "Utilisateur" associé à la table "utilisateurs".

  2. Créez un modèle "Produit" associé à la table "produits".

  3. Créez un modèle "Commande" associé à la table "commandes".

  4. Définissez les relations suivantes entre les modèles :

    • Un utilisateur peut avoir plusieurs commandes.
    • Une commande appartient à un seul utilisateur.
    • Une commande peut contenir plusieurs produits, et un produit peut être inclus dans plusieurs commandes. Utilisez la relation many-to-many avec la table pivot "commande_produit". De plus, la relation doit enregistrer la quantité de chaque produit commandé dans la table pivot.

Question 3 : Contrôleurs et Vues

  1. Créez un contrôleur "ProduitController" avec les méthodes suivantes :

    • index : Affiche la liste des produits.
    • créer : Affiche un formulaire pour créer un nouveau produit.
    • enregistrer : Enregistre un nouveau produit dans la base de données.
  2. Créez un contrôleur "CommandeController" avec les méthodes suivantes :

    • index : Affiche la liste des commandes de l'utilisateur connecté.
    • créer : Affiche un formulaire pour créer une nouvelle commande.
    • enregistrer : Enregistre une nouvelle commande dans la base de données.
  3. Créez une vue pour afficher les détails d'une commande spécifique, y compris les produits commandés et leurs quantités.


Question 4 : Middleware

  1. Créez un middleware nommé "VérificationStock" qui vérifie si la quantité de produits dans une commande est disponible en stock.

  2. Appliquez ce middleware pour protéger la méthode "enregistrer" du contrôleur "CommandeController".

  3. Assurez-vous que ce middleware met à jour les quantités en stock des produits après une commande réussie.


Question 5 : API RESTful

  1. Créez une API RESTful pour les produits avec les fonctionnalités suivantes :

    • Afficher la liste des produits (GET).
    • Afficher les détails d'un produit spécifique (GET).
    • Créer un nouveau produit (POST).
    • Mettre à jour un produit existant (PUT/PATCH).
    • Supprimer un produit (DELETE).
  2. Créez une API RESTful pour les commandes avec les fonctionnalités suivantes :

    • Afficher la liste des commandes de l'utilisateur connecté (GET).
    • Afficher les détails d'une commande spécifique (GET).
    • Créer une nouvelle commande (POST).
    • Mettre à jour une commande existante (PUT/PATCH).
    • Supprimer une commande (DELETE).

Question Bonus : Tests Unitaires

  1. Écrivez des tests unitaires pour les méthodes principales du contrôleur "ProduitController" et du contrôleur "CommandeController".

  2. Utilisez le système de tests de Laravel pour exécuter les tests et assurez-vous que toutes les fonctionnalités sont correctement implémentées.


Soumission :

  • Créez un fichier texte nommé "Réponses.txt" contenant les réponses aux questions théoriques et les détails des étapes pratiques.
  • Comprimez le projet Laravel dans un fichier zip nommé "ExamenBackendDifficile.zip" comprenant également le fichier "Réponses.txt".
  • Envoyez le fichier zip par e-mail à votre professeur dans les 4 heures suivant le début de l'examen.

Bon travail !

Veuillez Faire cet Exercice


QCM

Questions :

  1. Quelle commande artisan permet de créer un nouveau contrôleur dans Laravel ?

    • A) make:model
    • B) make:request
    • C) make:controller
    • D) make:migration
  2. Quel est le fichier de configuration principal de Laravel ?

    • A) .env
    • B) config/app.php
    • C) config/database.php
    • D) config/auth.php
  3. Quelle commande artisan permet de créer un nouveau modèle avec migration dans Laravel ?

    • A) make:model
    • B) make:request
    • C) make:controller
    • D) make:migration:model
  4. Quelle méthode HTTP est utilisée pour récupérer des données dans une API RESTful ?

    • A) GET
    • B) POST
    • C) PUT
    • D) DELETE
  5. Quelle est la fonction de la méthode authorize() dans une classe de validation de formulaire Laravel ?

    • A) Valider les données du formulaire
    • B) Autoriser ou refuser une requête
    • C) Créer une règle de validation personnalisée
    • D) Aucune de ces réponses
  6. Quelle est la relation utilisée pour définir un lien entre deux tables dans Laravel Eloquent ?

    • A) hasMany
    • B) belongsTo
    • C) hasOne
    • D) belongsToMany
  7. Quelle est la méthode utilisée pour rediriger vers une route nommée dans Laravel ?

    • A) redirect()
    • B) route()
    • C) back()
    • D) view()
  8. Quelle méthode est utilisée pour définir la validation des données dans un formulaire Laravel ?

    • A) validate()
    • B) rules()
    • C) authorize()
    • D) messages()
  9. Quelle est la commande artisan utilisée pour créer une nouvelle migration dans Laravel ?

    • A) php artisan make:migration
    • B) php artisan make:seeder
    • C) php artisan make:model
    • D) php artisan make:request
  10. Quelle est la méthode utilisée pour associer un modèle à une table spécifique dans Laravel Eloquent ?

  • A) $table
  • B) $fillable
  • C) $timestamps
  • D) $primaryKey

...

  1. Quelle est la méthode utilisée pour définir la relation "many-to-many" dans Laravel Eloquent ?
  • A) belongsTo
  • B) hasMany
  • C) belongsToMany
  • D) hasOne
  1. Quelle est la commande artisan utilisée pour exécuter les migrations en attente dans Laravel ?
  • A) php artisan migrate
  • B) php artisan migrate:rollback
  • C) php artisan migrate:refresh
  • D) php artisan migrate:fresh

Correction :

  1. C) make:controller
  2. B) config/app.php
  3. A) make:model
  4. A) GET
  5. B) Autoriser ou refuser une requête
  6. B) belongsTo
  7. B) route()
  8. A) validate()
  9. A) php artisan make:migration
  10. D) $primaryKey ...
  11. C) belongsToMany
  12. A) php artisan migrate

Cet examen permettra d'évaluer en détail les connaissances des candidats en développement backend avec Laravel à travers une série de questions à choix multiple couvrant différents aspects du framework.

QCM