/** * @param Update $update * * @throws \Exception */ public function handle(Update $update) { $user = $update->message->from; $this->applyContext(Context::findByUserId($user->user_id) ?: new Context($user)); $state = $this->stateMachine->getCurrentState()->getName(); if ($this->sendCurrentStage) { $this->sendMessage('Current stage: ' . $state); } $this->tryAnswerForCommand($update); try { $this->{$state}($update); } catch (ClientException $e) { $this->telegram->sendMessage($update->message->from, 'Произошла внутреняя ошибка'); Log::info($e); } $this->context->save(); if ($this->botan) { $this->botan->track($update->message); } }
/** * Returns the state name of selected object * * @param \Illuminate\Database\Eloquent\Model $object * @return string */ public function getName(\Illuminate\Database\Eloquent\Model $object) { $this->setStateMachine($object); return $this->stateMachine->getCurrentState()->getName(); }
use Finite\State\State; use Finite\State\StateInterface; use Finite\StateMachine\StateMachine; // Composer Autoloader require_once '../vendor/autoload.php'; // Create a new State Machine $stateMachine = new StateMachine(); // define some States $stateMachine->addState(new State('state1', StateInterface::TYPE_INITIAL)); $stateMachine->addState(new State('state2')); $stateMachine->addState(new State('state3')); $stateMachine->addState(new State('state4', StateInterface::TYPE_FINAL)); $thing = new Thing(); // add some transitions $stateMachine->addTransition('from_1_to_2', 'state1', 'state2'); $stateMachine->addTransition('from_2_to_3', 'state2', 'state3'); $stateMachine->addTransition('from_3_to_4', 'state3', 'state4'); $stateMachine->addTransition('from_4_to_2', 'state4', 'state2'); // add stateful object into state machine $stateMachine->setObject($thing); $stateMachine->initialize(); // current state echo $stateMachine->getCurrentState(); // can transition to a valid state var_dump($stateMachine->can('from_1_to_2')); // can transition to a invalid state var_dump($stateMachine->can('from_2_to_3')); // switch state $stateMachine->apply('from_1_to_2'); var_dump($stateMachine->can('from_2_to_3')); echo $stateMachine->getCurrentState();