réponses
279 vues
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(); }
1public function findById(int $id): ?UserDTO {2 $user = User::find($id);3 return $user ? $user->toDTO() : null;4}56public function create(UserDTO $userDTO): UserDTO {7 $user = new User($userDTO->toArray());8 $user->save();9 return $user->toDTO();10}1112public function update(int $id, UserDTO $userDTO): UserDTO {13 $user = User::findOrFail($id);14 $user->fill($userDTO->toArray());15 $user->save();16 return $user->toDTO();17}1819public function delete(int $id): void {20 User::destroy($id);21}1public function findById(int $id): ?UserDTO {2 $user = User::find($id);3 return $user ? $user->toDTO() : null;4}56public function create(UserDTO $userDTO): UserDTO {7 $user = new User($userDTO->toArray());8 $user->save();9 return $user->toDTO();10}1112public function update(int $id, UserDTO $userDTO): UserDTO {13 $user = User::findOrFail($id);14 $user->fill($userDTO->toArray());15 $user->save();16 return $user->toDTO();17}1819public function delete(int $id): void {20 User::destroy($id);21}
} 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 ) {}
1public static function fromArray(array $data): UserDTO {2 return new self(3 $data['name'],4 $data['email'],5 $data['password'] ?? null6 );7}89public function toArray(): array {10 return [11 'name' => $this->name,12 'email' => $this->email,13 'password' => $this->password,14 ];15}1public static function fromArray(array $data): UserDTO {2 return new self(3 $data['name'],4 $data['email'],5 $data['password'] ?? null6 );7}89public function toArray(): array {10 return [11 'name' => $this->name,12 'email' => $this->email,13 'password' => $this->password,14 ];15}
} Utilisez le UserRepository dans votre contrôleur pour manipuler les utilisateurs: php Copy code class UserController extends Controller { private UserRepository $userRepository;
1public function __construct(UserRepository $userRepository) {2 $this->userRepository = $userRepository;3}45public function index() {6 $users = $this->userRepository->findAll();7 return view('users.index', compact('users'));8}910public function create() {11 return view('users.create');12}1314public function store(Request $request) {15 $userDTO = UserDTO::fromArray($request->input());16 $this->userRepository->create($userDTO);17 return redirect()->route('users.index');18}1920public function edit(int $id) {21 $user = $this->userRepository->findById($id);22 return view('users.edit', compact('user'));23}2425public function update(Request $request, int $id) {26 $userDTO = UserDTO::fromArray($request->input());27 $this->userRepository->update($id, $userDTO);28 return redirect()->route('users.index');29}3031public function delete(int $id) {32 $this->userRepository->delete($id);33 return redirect()->route(‘users.index’);1public function __construct(UserRepository $userRepository) {2 $this->userRepository = $userRepository;3}45public function index() {6 $users = $this->userRepository->findAll();7 return view('users.index', compact('users'));8}910public function create() {11 return view('users.create');12}1314public function store(Request $request) {15 $userDTO = UserDTO::fromArray($request->input());16 $this->userRepository->create($userDTO);17 return redirect()->route('users.index');18}1920public function edit(int $id) {21 $user = $this->userRepository->findById($id);22 return view('users.edit', compact('user'));23}2425public function update(Request $request, int $id) {26 $userDTO = UserDTO::fromArray($request->input());27 $this->userRepository->update($id, $userDTO);28 return redirect()->route('users.index');29}3031public function delete(int $id) {32 $this->userRepository->delete($id);33 return redirect()->route(‘users.index’);
} }
TOURE suite
Il faut Se connecter ou Créer un compte pour participer à cette conversation.