Home > Back-end >  Problem for working with DTO - Laravel, PHP
Problem for working with DTO - Laravel, PHP

Time:08-27

For example I have code like this:

        $this->users = $data['data'];
        $this->month = $data['month'];
        $this->year = $data['year'];

But I need to use DTO. For example I used this function in DTO class:

    public function getUsers(): string
    {
        return $this->users;
    }

And as I understand I need to add it to the first code. But I don't understand how to use DTO for my the first code. Can you explain me please?

upd

Now I have:

public function __construct($data, $jobWatcherId)
{
   $this->jobWatcherId = $jobWatcherId;

   $jobsDTO = new JobsDTO($data['data'], $data['month'], $data['year'],
                          $data['working_days'], $data['holiday_hours'],
                          $data['advance_payroll_date'], $data['main_payroll_date']);
}


public function handle()
{
    $jobWatcher = JobWatcher::find($this->jobWatcherId);

    try {
        $startedAt = now();

        $jobWatcher->update([
           'status_id' => JobWatcherStatusEnum::PROCESSING,
           'started_at' => $startedAt,
        ]);

        $redmineService = new RedmineAPIService();
        foreach ($jobsDTO->getUsers() as $user) {

        }

And for line foreach ($jobsDTO->getUsers() as $user) I have Undefined variable '$jobsDTO'

CodePudding user response:

Your question is a bit unclear, but as I understand it, you want to instantiate a DTO with the above data?

You could have a class like:

class UsersDTO
{
   public array $users;
   public int $month;
   public int $year;

   public function __construct(array $users, int $month, int $year)
   {
      $this->users = $users;
      $this->month = $month;
      $this->year = $year;
   }

   public function getUsers(): array
   {
      return $this->users;
   }

   public function getMonth(): int
   {
      return $this->month;
   }

   public function getYear(): int
   {
      return $this->year;
   }
}

and then somewhere else call:

$usersDTO = new UsersDTO($data['data'], $data['month'], $data['year']);
// Do something with $usersDTO->getUsers();
  • Related