Open TheGeekyM opened 4 years ago
Thanks for opening this issue. Once closed, we will ask you and to all participants to provide open feedback about your experience. Thanks in advance!
I want to know too. I am reading your wonderful book and repository.
I created a data transformer for a collection class in my project.
Application service:
public function execute($request = null)
{
// ...
$users = // ...
return $this->usersDataTransformer->write($users)->read();
}
Data transformer for a collection class:
class UsersDtoDataTransformer implements UsersDataTransformer
{
private $users;
private $userDataTransformer;
public function __construct(UserDtoDataTransformer $userDataTransformer)
{
$this->userDataTransformer = $userDataTransformer;
}
public function write(Users $users): self
{
$this->users = $users;
return $this;
}
public function read()
{
// Should I wrap this with a DTO?
return array_map(function (User $user): object {
return $this->userDataTransformer->write($user)->read();
}, $this->users->toArray());
}
}
If pagination is needed, I created a data transformer in the infrastructure layer. This transformer translates into a paginator.
namespace MyApp\Infrastructure\Application\DataTransformer\User;
// uses...
class UsersLaravelLengthAwarePaginatorDataTransformer implements UsersDataTransformer
{
private $users;
private $usersDataTransformer;
private $perPage = 10;
private $currentPage;
private $options;
public function __construct(UsersDtoDataTransformer $usersDataTransformer)
{
$this->usersDataTransformer = $usersDataTransformer;
$this->currentPage = LengthAwarePaginator::resolveCurrentPage();
$this->options = [
'path' => LengthAwarePaginator::resolveCurrentPath(),
];
}
public function setPerPage(int $perPage): self
{
$this->perPage = $perPage;
return $this;
}
public function write(Users $users): self
{
$this->users = $users;
return $this;
}
public function read()
{
$users = $this->usersDataTransformer->write($this->users)->read();
// Should I wrap it with a DTO?
return new LengthAwarePaginator(
array_slice(
$users,
$this->perPage * ($this->currentPage - 1),
$this->perPage
),
count($users),
$this->perPage,
$this->currentPage,
$this->options
);
}
}
I have following questions.
In all of your examples in application services you illustrate how to return a DTO but with one user so I need to know how to return a collection of users
this is what you did with one user, or in another example, you return a user transformer:
and what should to be done in pagination?