Пример #1
0
 public final function __invoke(Event $event, Stateful $object, Context $context, Input $input, State $nextState)
 {
     $object->setCurrentState($nextState);
 }
Пример #2
0
 public function __invoke(EventInterface $event, Stateful $object, Context $context, Input $input, State $nextState)
 {
     $object->setCurrentState(FlyweightState::named('it worked!'));
 }
Пример #3
0
 /**
  * Emits the events corresponding to applying the provided input on the provided object.
  *
  * @param Input $input
  * @param Stateful $object
  * @param Context $context
  * @param State $nextState
  *
  * @return void
  *
  * @throws StateTransitionFailed
  */
 private function emitEvents(Input $input, Stateful $object, Context $context, State $nextState)
 {
     /** @var Event $event */
     foreach ($this->eventProvider($input, $object->getCurrentState()) as $event) {
         if (!$this->emitter->hasListeners($event->getName())) {
             continue;
         }
         if ($this->emitter->emit($event, $object, $context, $input, $nextState)->isPropagationStopped()) {
             $this->emitter->emit(Event::named('failed'), $object, $context, $input, $nextState);
             throw new StateTransitionFailed($input, $object, $context, $nextState);
         }
     }
 }