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
- mot_de_passe
Question 2 : Authentification
- Créez un modèle "Utilisateur" associé à la table "utilisateurs".
- Implémentez l'authentification des utilisateurs en utilisant le système d'authentification par défaut de Laravel.
- Créez une route "/mon-compte" protégée qui affiche les informations de l'utilisateur connecté.
Question 3 : Gestion des Articles
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)
Créez un modèle "Article" associé à la table "articles".
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
- Définissez la relation "un utilisateur a plusieurs articles" dans le modèle Utilisateur.
- 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 !
Dans le modèle User :
Exercice 2
Question 1 : Migration et Seed
Créez une migration pour une table "produits" avec les champs suivants :
- id (clé primaire)
- nom
- prix
- description
Créez un seeder pour insérer quelques produits factices dans la base de données.
Question 2 : Modèles et Relations
Créez un modèle "Produit" associé à la table "produits".
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
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.
Créez une vue pour afficher la liste des produits avec leurs détails.
Question 4 : Middleware
Créez un middleware nommé "VérificationAdmin" qui vérifie si l'utilisateur actuel est un administrateur.
Appliquez ce middleware pour protéger la route de création de nouveaux produits dans le contrôleur "ProduitController".
Question 5 : API RESTful
- 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
Écrivez des tests unitaires pour les méthodes principales du contrôleur "ProduitController" (index, créer, enregistrer).
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 !
Créez une migration pour une table "produits" avec les champs suivants : Dans le fichier de migration create_produits_table.php : Créez un seeder pour insérer quelques produits factices dans la base de données. Dans le seeder ProduitsTableSeeder.php, ajoutez la logique pour insérer des données dans la table "produits". Exécutez le seeder : Question 2 : Modèles et Relations
Créez un modèle "Produit" associé à la table "produits". Dans le modèle Produit.php, définissez la relation "many-to-many" avec le modèle "Utilisateur". Définissez une relation "many-to-many" entre les modèles "Produit" et "Utilisateur" dans le modèle "Utilisateur". Question 3 : Contrôleurs et Vues
Créez un contrôleur "ProduitController" avec les méthodes suivantes : Dans le contrôleur ProduitController.php, ajoutez les méthodes index, créer et enregistrer. Créez une vue pour afficher la liste des produits avec leurs détails. Dans la vue index.blade.php : Question 4 : Middleware
Créez un middleware nommé "VérificationAdmin" qui vérifie si l'utilisateur actuel est un administrateur. Dans le middleware VerifierAdmin.php, ajoutez la logique de vérification de l'administrateur. Appliquez ce middleware pour protéger la route de création de nouveaux produits dans le contrôleur "ProduitController". 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. Question Bonus : Tests Unitaires
Écrivez des tests unitaires pour les méthodes principales du contrôleur "ProduitController". Exécutez les tests :
Exercice 3
Créez une migration pour une table "utilisateurs" avec les champs suivants :
- id (clé primaire)
- nom
- mot_de_passe
- isAdmin (un booléen pour déterminer si l'utilisateur est un administrateur)
Créez une migration pour une table "produits" avec les champs suivants :
- id (clé primaire)
- nom
- prix
- quantité_en_stock
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)
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.
Créez des seeders pour insérer des données factices dans les tables utilisateurs, produits et commandes.
Question 2 : Modèles et Relations
Créez un modèle "Utilisateur" associé à la table "utilisateurs".
Créez un modèle "Produit" associé à la table "produits".
Créez un modèle "Commande" associé à la table "commandes".
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
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.
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.
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
Créez un middleware nommé "VérificationStock" qui vérifie si la quantité de produits dans une commande est disponible en stock.
Appliquez ce middleware pour protéger la méthode "enregistrer" du contrôleur "CommandeController".
Assurez-vous que ce middleware met à jour les quantités en stock des produits après une commande réussie.
Question 5 : API RESTful
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).
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
Écrivez des tests unitaires pour les méthodes principales du contrôleur "ProduitController" et du contrôleur "CommandeController".
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 :
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
Quel est le fichier de configuration principal de Laravel ?
- A) .env
- B) config/app.php
- C) config/database.php
- D) config/auth.php
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
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
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
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
Quelle est la méthode utilisée pour rediriger vers une route nommée dans Laravel ?
- A) redirect()
- B) route()
- C) back()
- D) view()
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()
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
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
...
- 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
- 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 :
- C) make:controller
- B) config/app.php
- A) make:model
- A) GET
- B) Autoriser ou refuser une requête
- B) belongsTo
- B) route()
- A) validate()
- A) php artisan make:migration
- D) $primaryKey ...
- C) belongsToMany
- 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.