Aller au contenu principal

Anti-patterns interdits

Ne jamais générer ces patterns.

Liste des interdits

PatternRaison
$request->all() en mass assignmentInjection de données non validées
Logique métier dans BladeCouplage, non testable, non réutilisable
Vérifications de permission uniquement en JavaScriptContournable côté client
Contrôleurs avec requêtes complexes et workflowsViole le principe thin controller
SQL brut quand Eloquent/query builder suffitLisibilité, sécurité
Fonctions helper dupliquées entre modulesDRY violation
Noms de rôles hardcodés comme seule règle d'autorisationFragile et non maintenable
env() en dehors des fichiers configCache config cassé en production
Logger secrets, tokens, mots de passe, cookiesFuite de données
Supprimer définitivement des enregistrements auditables sans approbationPerte de données historiques
Migrations avec FK non id_*Violation de convention
Hardcoder URLs ou clés de providers IAViolation du pattern AiProviderConfigService

Exemple — interdit vs correct

// ❌ INTERDIT
public function store(Request $request)
{
if (auth()->user()->role === 'admin') {
User::create($request->all());
}
}

// ✅ CORRECT
public function store(StoreUserRequest $request): RedirectResponse
{
$this->authorize('create', User::class);
$user = $this->userService->create($request->validated());
return redirect()->route('admin.users.edit', $user);
}
// ❌ INTERDIT
if (auth()->user()->role === 'admin') {
DB::table('users')->delete($id);
}

// ✅ CORRECT
$this->authorize('delete', $user);
$this->userService->delete($user);

Règles d'optimisation IA

  • Préférer les patterns existants du projet aux exemples Laravel génériques
  • Toujours inspecter le code voisin avant de générer du nouveau code
  • Garder le code généré aligné avec les modules voisins
  • Éviter les nouvelles abstractions sans justification
  • Minimiser la dérive architecturale
  • Maintenir la cohérence de nommage, de dossiers et de workflows