Skip to main content
Version: 9.x

Tasks

Definition & Principles#

Read from the Porto SAP Documentation (#Tasks).

Rules#

  • All Tasks MUST extend from App\Ship\Parents\Tasks\Task.

Folder Structure#

 - app    - Containers        - {container-name}            - Tasks                - ConfirmUserEmailTask.php                - GenerateEmailConfirmationUrlTask.php                - SendConfirmationEmailTask.php                - ValidateConfirmationCodeTask.php                - SetUserEmailTask.php                - ...

Code Sample#

Find User Task by ID:

<?php
namespace App\Containers\User\Tasks;
use App\Containers\User\Contracts\UserRepositoryInterface;use App\Ship\Parents\Tasks\Task;use Exception;
class FindUserByIdTask extends Task{    private $userRepository;
    public function __construct(UserRepositoryInterface $userRepository)    {        $this->userRepository = $userRepository;    }
    public function run($id)    {        try {            $user = $this->userRepository->find($id);        } catch (Exception $e) {            throw new UserNotFoundException();        }
        return $user;    }
}

Tasks usage from an Action:

<?php
namespace App\Containers\Email\Actions;
use App\Containers\Email\Tasks\ConfirmUserEmailTask;use App\Containers\Email\Tasks\ValidateConfirmationCodeTask;use App\Containers\User\Tasks\FindUserByIdTask;use App\Ship\Parents\Actions\Action;
class ValidateUserEmailByConfirmationCodeAction extends Action{    private $validateConfirmationCodeTask;
    private $findUserByIdTask;
    private $confirmUserEmailTask;
    public function __construct(        ValidateConfirmationCodeTask $validateConfirmationCodeTask,        FindUserByIdTask $findUserByIdTask,        ConfirmUserEmailTask $confirmUserEmailTask    ) {        $this->validateConfirmationCodeTask = $validateConfirmationCodeTask;        $this->findUserByIdTask = $findUserByIdTask;        $this->confirmUserEmailTask = $confirmUserEmailTask;    }
    public function run($userId, $code)    {        $this->validateConfirmationCodeTask->run($userId, $code);        $user = $this->findUserByIdTask->run($userId);        $this->confirmUserEmailTask->run($user);        ...    }}