https://laracasts.com/lessons/laravel-5-commands
https://laravel.com/docs/master/queues https://laracasts.com/series/whip-monstrous-code-into-shape/episodes/2 https://laracasts.com/series/commands-and-domain-events (screencast versió 4)
Llegiu article Command prèviament per saber que és una comanda, un command handler i command bus
El en cas de Laravel a la versió 5.0 existia Command Bus
https://laravel.com/docs/5.0/bus
En canvi en la versió 5.1 no ho trobareu. Això no vol dir però que no s'utilitzi/es pugui utilitzar simplement el sistema ara simplement té:
Laravel Jobs o Laravel Queues : https://laravel.com/docs/master/queues Laravel events per a més informació sobre els esdeveniments. De fet els handlers dels esdeveniments es poden executar en segon terme molt fàcilment
Des de la versió 5.2 com podeu veure a la Upgrade guide https://laravel.com/docs/master/upgrade:
Commands And Handlers Self-Handling Commands You no longer need to implement the SelfHandling contract on your jobs / commands. All jobs are now self-handling by default, so you can remove this interface from your classes. Separate Commands & Handlers The Laravel 5.2 command bus now only supports self-handling commands and no longer supports separate commands and handlers. If you would like to continue using separate commands and handlers, you may install a Laravel Collective package which provides backwards- compatible support for this: https://github.com/LaravelCollective/bus
És a dir que el sistema de Laravel no separa la comanda en si del handler o listener i són el mateix?
Les comandes són utilitzades sovint com una forma de separar els aspectes tècnics del User input del seu sentit dins de l'aplicació. En llenguatges orientats a objectes una comanda acaba sent un objecte (com no? ;-)). Un comanda acaba sent una classe que indica el comportament d'un usuari
Exemples de comandes poden ser:
StartDiscussion, SortList, SignUp, etc.
Vegem un exemple amb SignUp:
class SignUp { private $emailAddress; private $password; public function __construct($emailAddress, $password) { $this->emailAddress = $emailAddress; $this->password = $password; } }
I al controlador executem la comanda:
class UserController { public function signUpAction(Request $request) { $command = new SignUp( $request->request->get('emailAddress'), $request->request->get('password') ); ... } }
Utilitzant un framework podem tenir un Command Bus que gestioni les comandes i un codi similar a:
$this->commandBus()->handle($command);
Resources: