answers
250 views
LE REPOSITORY PATTERNS AVEC LARAVEL 10 + DTO
Voici un exemple d’implémentation du pattern Repository avec des DTO pour un CRUD User dans Laravel 10 PHP 8:
Créez une interface UserRepository qui définit les méthodes CRUD nécessaires pour manipuler les utilisateurs: php Copy code interface UserRepository { public function findAll(): array; public function findById(int $id): ?UserDTO; public function create(UserDTO $userDTO): UserDTO; public function update(int $id, UserDTO $userDTO): UserDTO; public function delete(int $id): void;} Créez une implémentation concrète du UserRepository appelée EloquentUserRepository qui utilise les modèles Eloquent pour effectuer les opérations CRUD: php Copy code class EloquentUserRepository implements UserRepository { public function findAll(): array { return User::all()->map(fn(User $user) => $user->toDTO())->toArray(); }
public function findById(int $id): ?UserDTO { $user = User::find($id); return $user ? $user->toDTO() : null;} public function create(UserDTO $userDTO): UserDTO { $user = new User($userDTO->toArray()); $user->save(); return $user->toDTO();} public function update(int $id, UserDTO $userDTO): UserDTO { $user = User::findOrFail($id); $user->fill($userDTO->toArray()); $user->save(); return $user->toDTO();} public function delete(int $id): void { User::destroy($id);}
} Créez une classe UserDTO qui encapsule les données de l’utilisateur: php Copy code class UserDTO { public function __construct( public string $name, public string $email, public ?string $password = null ) {}
public static function fromArray(array $data): UserDTO { return new self( $data['name'], $data['email'], $data['password'] ?? null );} public function toArray(): array { return [ 'name' => $this->name, 'email' => $this->email, 'password' => $this->password, ];}
} Utilisez le UserRepository dans votre contrôleur pour manipuler les utilisateurs: php Copy code class UserController extends Controller { private UserRepository $userRepository;
public function __construct(UserRepository $userRepository) { $this->userRepository = $userRepository;} public function index() { $users = $this->userRepository->findAll(); return view('users.index', compact('users'));} public function create() { return view('users.create');} public function store(Request $request) { $userDTO = UserDTO::fromArray($request->input()); $this->userRepository->create($userDTO); return redirect()->route('users.index');} public function edit(int $id) { $user = $this->userRepository->findById($id); return view('users.edit', compact('user'));} public function update(Request $request, int $id) { $userDTO = UserDTO::fromArray($request->input()); $this->userRepository->update($id, $userDTO); return redirect()->route('users.index');} public function delete(int $id) { $this->userRepository->delete($id); return redirect()->route(‘users.index’);
} }
TOURE suite
You need Log in or Create an account to join the conversation.