public findOrCreateTransition ( string $sourceStateName, string $targetStateName, string $eventName = null, MetaborStd\Statemachine\ConditionInterface $condition = null ) : MetaborStd\Statemachine\TransitionInterface | ||
$sourceStateName | string | |
$targetStateName | string | |
$eventName | string | |
$condition | MetaborStd\Statemachine\ConditionInterface | |
Результат | MetaborStd\Statemachine\TransitionInterface |
public function findOrCreateTransition($sourceStateName, $targetStateName, $eventName = null, ConditionInterface $condition = null)
{
$sourceState = $this->findOrCreateState($sourceStateName);
$targetState = $this->findOrCreateState($targetStateName);
$transition = $this->findTransition($sourceState, $targetState, $eventName, $condition);
if (!$transition) {
$transition = $this->createTransition($sourceState, $targetState, $eventName, $condition);
$this->addTransition($sourceState, $transition);
}
return $transition;
}
/** * */ public function testFiltersStatesThatHaveTransitionsWithoutAnEvent() { $eventName = 'event'; $stateCollection = new StateCollection(); $helper = new SetupHelper($stateCollection); $helper->findOrCreateTransition('foo', 'bar', $eventName); $helper->findOrCreateTransition('bar', 'baz', null, new Tautology('condition')); $filter = new FilterStateByTransition($stateCollection->getStates()); $filteredStates = iterator_to_array($filter); $this->assertNotContains($stateCollection->getState('foo'), $filteredStates); $this->assertContains($stateCollection->getState('bar'), $filteredStates); $this->assertNotContains($stateCollection->getState('baz'), $filteredStates); }