1 | <?php |
||
21 | class ArrayLoader implements LoaderInterface |
||
22 | { |
||
23 | /** |
||
24 | * @var array |
||
25 | */ |
||
26 | private $config; |
||
27 | |||
28 | /** |
||
29 | * @var CallbackHandler |
||
30 | */ |
||
31 | private $callbackHandler; |
||
32 | |||
33 | /** |
||
34 | * @var CallbackBuilderFactoryInterface |
||
35 | */ |
||
36 | private $callbackBuilderFactory; |
||
37 | |||
38 | /** |
||
39 | * @param array $config |
||
40 | * @param CallbackHandler $handler |
||
41 | * @param CallbackBuilderFactoryInterface $callbackBuilderFactory |
||
42 | */ |
||
43 | 40 | public function __construct(array $config, CallbackHandler $handler = null, CallbackBuilderFactoryInterface $callbackBuilderFactory = null) |
|
58 | |||
59 | /** |
||
60 | * {@inheritdoc} |
||
61 | */ |
||
62 | 35 | public function load(StateMachineInterface $stateMachine) |
|
82 | |||
83 | /** |
||
84 | * {@inheritdoc} |
||
85 | */ |
||
86 | 5 | public function supports($object, $graph = 'default') |
|
92 | |||
93 | /** |
||
94 | * @param StateMachineInterface $stateMachine |
||
95 | */ |
||
96 | 35 | private function loadStates(StateMachineInterface $stateMachine) |
|
111 | |||
112 | /** |
||
113 | * @param StateMachineInterface $stateMachine |
||
114 | */ |
||
115 | 35 | private function loadTransitions(StateMachineInterface $stateMachine) |
|
116 | { |
||
117 | 35 | $resolver = new OptionsResolver(); |
|
118 | 35 | $resolver->setRequired(array('from', 'to')); |
|
119 | 35 | $resolver->setDefaults(array('guard' => null, 'configure_properties' => null, 'properties' => array())); |
|
120 | |||
121 | 35 | $resolver->setAllowedTypes('configure_properties', array('null', 'callable')); |
|
122 | |||
123 | $resolver->setNormalizer('from', function (Options $options, $v) { return (array) $v; }); |
||
124 | $resolver->setNormalizer('guard', function (Options $options, $v) { return !isset($v) ? null : $v; }); |
||
125 | 7 | $resolver->setNormalizer('configure_properties', function (Options $options, $v) { |
|
126 | 30 | $resolver = new OptionsResolver(); |
|
127 | |||
128 | 30 | $resolver->setDefaults($options['properties']); |
|
129 | |||
130 | 30 | if (is_callable($v)) { |
|
131 | 5 | $v($resolver); |
|
132 | 3 | } |
|
133 | |||
134 | 30 | return $resolver; |
|
135 | 35 | }); |
|
136 | |||
137 | 35 | foreach ($this->config['transitions'] as $transition => $config) { |
|
138 | 30 | $config = $resolver->resolve($config); |
|
139 | 30 | $stateMachine->addTransition( |
|
140 | 30 | new Transition( |
|
141 | 30 | $transition, |
|
142 | 30 | $config['from'], |
|
143 | 30 | $config['to'], |
|
144 | 30 | $config['guard'], |
|
145 | 30 | $config['configure_properties'] |
|
146 | 18 | ) |
|
147 | 18 | ); |
|
148 | 21 | } |
|
149 | 35 | } |
|
150 | |||
151 | /** |
||
152 | * @param StateMachineInterface $stateMachine |
||
153 | */ |
||
154 | 35 | private function loadCallbacks(StateMachineInterface $stateMachine) |
|
164 | |||
165 | 10 | private function loadCallbacksFor($position, $stateMachine) |
|
186 | |||
187 | 10 | private function getCallbacksResolver() |
|
214 | } |
||
215 |