LE REPOSITORY PATTERNS AVEC LARAVEL 10 + DTO

bt_numerique225 @bt_numerique225 130 XP a posé dans

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

Veuillez vous connecter ou créer un compte pour participer à cette conversation.