bt_numerique225
a posé

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}
5
6public function create(UserDTO $userDTO): UserDTO {
7 $user = new User($userDTO->toArray());
8 $user->save();
9 return $user->toDTO();
10}
11
12public 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}
18
19public 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}
5
6public function create(UserDTO $userDTO): UserDTO {
7 $user = new User($userDTO->toArray());
8 $user->save();
9 return $user->toDTO();
10}
11
12public 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}
18
19public 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'] ?? null
6 );
7}
8
9public 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'] ?? null
6 );
7}
8
9public 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}
4
5public function index() {
6 $users = $this->userRepository->findAll();
7 return view('users.index', compact('users'));
8}
9
10public function create() {
11 return view('users.create');
12}
13
14public function store(Request $request) {
15 $userDTO = UserDTO::fromArray($request->input());
16 $this->userRepository->create($userDTO);
17 return redirect()->route('users.index');
18}
19
20public function edit(int $id) {
21 $user = $this->userRepository->findById($id);
22 return view('users.edit', compact('user'));
23}
24
25public 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}
30
31public 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}
4
5public function index() {
6 $users = $this->userRepository->findAll();
7 return view('users.index', compact('users'));
8}
9
10public function create() {
11 return view('users.create');
12}
13
14public function store(Request $request) {
15 $userDTO = UserDTO::fromArray($request->input());
16 $this->userRepository->create($userDTO);
17 return redirect()->route('users.index');
18}
19
20public function edit(int $id) {
21 $user = $this->userRepository->findById($id);
22 return view('users.edit', compact('user'));
23}
24
25public 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}
30
31public 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.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer ce sujet ? Cette action est irréversible.