Aller au contenu principal

Patterns approuvés

Utiliser ces patterns sauf si le code existant dans le module cible utilise clairement un standard local différent.

Tableau de référence

PréoccupationPattern
ValidationClasses Form Request
AutorisationPolicies, gates, middleware can
Logique métierServices
Requêtes répétéesRepositories ou query scopes
Persistance multi-writeDB::transaction()
Formatage de sortieAPI Resources ou ViewModels
Travail asynchroneQueued jobs et listeners
Réutilisation UIComposants Blade
Settings moduleApplication->getSetting('key') depuis core_applications
Provider IAAiProviderConfigService — jamais hardcodé
Champs sensiblesCast Eloquent 'encrypted'

Flux de référence

Route → Middleware → Form Request → Policy → Controller → Service → Model/Repository → Log/Event → Response

Exemple — bon pattern

// Form Request
class StoreUserRequest extends FormRequest
{
public function rules(): array
{
return [
'name' => ['required', 'string', 'max:150'],
'id_service' => ['required', 'integer', 'exists:services,id_service'],
'id_role' => ['required', 'integer', 'exists:roles,id_role'],
];
}
}

// Controller
public function store(StoreUserRequest $request): RedirectResponse
{
$this->authorize('create', User::class);
$user = $this->userService->create($request->validated());
return redirect()->route('admin.users.edit', $user)->with('success', 'Créé.');
}

// Service
public function create(array $data): User
{
return DB::transaction(function () use ($data): User {
$user = User::create($data);
Log::info('User created', ['id_user' => $user->id_user]);
return $user;
});
}