Fonctionnalité Laravel complète : migration, policy, contrôleur et tests

Développez une fonctionnalité Laravel de bout en bout : migration, modèle, Form Request, Policy, contrôleur, routes et tests Pest ou PHPUnit, sans requêtes N+1. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 5 variables personnalisables et vous pouvez le copier gratuitement en un clic.

Intermédiaire · Code · En attente de relecture éditoriale

Prompt

Agis comme un développeur PHP senior spécialisé dans Laravel et le code maintenable.

Je dois implémenter cette fonctionnalité dans une application Laravel {{version_laravel}} : {{fonctionnalite}}.
- Entités et relations : {{entites}}
- Rôles et permissions : {{roles}}
- Framework de tests : {{tests}}

Livrables, dans cet ordre :
1. Résumé de la conception : tables, relations Eloquent, routes et rôle de chaque couche (contrôleur, Form Request, Policy, action ou service).
2. Les migrations avec clés étrangères, index et `onDelete` explicite, puis les modèles avec `$fillable` ou `$guarded`, `casts` et relations.
3. Les Form Requests avec règles de validation et messages en français.
4. Une Policy enregistrée et appliquée via `authorize` ou le middleware `can`, pour chaque rôle.
5. Un contrôleur léger (resource ou à action unique) qui délègue la logique métier à une classe d’action, avec `DB::transaction` dès qu’il y a plusieurs écritures.
6. Des routes nommées avec middleware et route model binding.
7. La sortie : une API Resource pour une API, ou des vues Blade minimales pour une appli web. Chargement anticipé (`with`) pour éviter les requêtes N+1.
8. Des factories et des tests de fonctionnalité : cas nominal, validation en échec, utilisateur non autorisé (403) et ressource d’un autre utilisateur.
9. Les commandes Artisan pour générer les fichiers et lancer les tests.

Contraintes :
- Respecte les conventions Laravel et PSR-12 ; aucune logique dans les fichiers de routes.
- N’invente ni colonnes, ni rôles, ni règles : demande-moi ce qui manque ou indique [À COMPLÉTER].
- Si la version choisie change quelque chose (par exemple la structure de `bootstrap/app.php`), précise-le.

Format : un bloc de code par fichier avec son chemin, puis la liste des étapes d’intégration.

Comment l'utiliser

  1. Décrivez la fonctionnalité sous forme de récit utilisateur avec ses règles.
  2. Indiquez les tables qui existent déjà pour éviter les doublons.
  3. Générez les fichiers avec Artisan, collez le code et lancez les tests.
  4. Vérifiez la Policy avec chaque rôle avant de déployer.

Exemple d'utilisation

Fonctionnalité : les clients demandent des devis et les commerciaux les valident · Entités : Client, Devis, LigneDevis · Laravel 11 · Pest.

Exemple de résultat

4. Policy — app/Policies/QuotePolicy.php

<?php

namespace App\Policies;

use App\Enums\QuoteStatus;
use App\Models\Quote;
use App\Models\User;

class QuotePolicy
{
    // L’admin peut tout faire ; null laisse les autres méthodes décider
    public function before(User $user): ?bool
    {
        return $user->isAdmin() ? true : null;
    }

    public function view(User $user, Quote $quote): bool
    {
        return $user->isSalesRep() || $quote->customer->user_id === $user->id;
    }

    public function create(User $user): bool
    {
        return $user->isCustomer();
    }

    public function approve(User $user, Quote $quote): bool
    {
        return $user->isSalesRep() && $quote->status === QuoteStatus::Pending;
    }
}

Avec Laravel 11, la Policy est découverte automatiquement si elle respecte la convention App\Models\Quote → App\Policies\QuotePolicy : inutile de l’enregistrer dans un AuthServiceProvider.

Intégration

  1. php artisan make:policy QuotePolicy --model=Quote
  2. Dans le contrôleur : Gate::authorize('approve', $quote);
  3. Test Pest : un client qui tente de valider reçoit 403, de même qu’un client qui ouvre le devis d’un autre.
  4. isAdmin(), isSalesRep() et isCustomer() dépendent de la façon dont vous stockez les rôles → [À COMPLÉTER]…

Informations clés

Catégorie
Programmation et développement · PHP
Type de résultat
Code
Niveau
Intermédiaire
Conçu pour
ChatGPT, Claude, Gemini et Microsoft Copilot
Vérifié sur
En attente de vérification éditoriale
Variables
Fonctionnalité, Entités et relations, Rôles et permissions, Version de Laravel et Framework de tests
Langue
Français
Prix
Gratuit, sans inscription
Mis à jour
07/11/2026

Questions fréquentes

Pourquoi une classe d’action plutôt que tout mettre dans le contrôleur ?

La logique devient réutilisable depuis des commandes, des jobs ou des tests, et le contrôleur ne fait que traduire le HTTP. Elle est aussi plus simple à tester isolément.

Comment repérer les requêtes N+1 dans le code généré ?

Activez `Model::preventLazyLoading()` hors production : Laravel lève une exception dès qu’une relation est chargée paresseusement.

À quoi sert ce prompt ?

Développez une fonctionnalité Laravel de bout en bout : migration, modèle, Form Request, Policy, contrôleur, routes et tests Pest ou PHPUnit, sans requêtes N+1.

Avec quels outils d'IA fonctionne-t-il ?

Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.

Comment personnaliser le prompt ?

Cliquez sur « Personnaliser » et remplissez les variables (Fonctionnalité, Entités et relations, Rôles et permissions, Version de Laravel et Framework de tests). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.

Faut-il de l'expérience pour l'utiliser ?

Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.

Ce prompt est-il gratuit ?

Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.

Puis-je me fier au résultat de l'IA ?

Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.

Prompts similaires