/domain-dispatcher

Domain command dispatcher

Primary LanguagePHPMIT LicenseMIT

Domain Dispatcher

Latest Stable Version Build Status Code Coverage Scrutinizer Code Quality SensioLabsInsight

Command dispatcher that integrates with league/container.

Install

Via Composer

$ composer require spekkionu/domain-dispatcher

Usage

You must first register the service provider in your league/container instance.

$container->addServiceProvider('Spekkionu\DomainDispatcher\DispatcherServiceProvider');

Then you can use the dispatcher by pulling it out of the container.

$container = new \League\Container\Container();
$container->delegate(
    new \League\Container\ReflectionContainer
);
$dispatcher = $container->get('Spekkionu\DomainDispatcher\Dispatcher');
$command = new MyCommand($var1, $var2);
$dispatcher->dispatch($command);

Writing a command

class MyCommand
{
    /**
     * @var User
     */
    private $user;
    
    /**
     * You can add any arguments you need to the constructor
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
    
    /**
     * The command must have a handle method.
     * Any dependencies for the handle method will be automatically resolved by the container
     * Whatever you return here will be returned by the dispatch call
     */
    public function handle(EmailSender $mailer, Logger $logger)
    {
        // Your code goes here
        $result = $mailer->sendWelcomeEmail($user);
        $logger->log('Welcome email sent to user');
        
        return $result;
    }
}
$user = new User();
$user->name = 'Bob';
$user->email = 'email@example.com';

$command = new MyCommand($user);
$result = $dispatcher->dispatch($command);

Testing

$ composer test

License

The MIT License (MIT). Please see License File for more information.