Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 52eccf9

Browse filesBrowse files
committed
[Workflow] Event parameters
1 parent 16cea37 commit 52eccf9
Copy full SHA for 52eccf9

File tree

3 files changed

+55
-33
lines changed
Filter options

3 files changed

+55
-33
lines changed

‎src/Symfony/Component/Workflow/Event/Event.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Workflow/Event/Event.php
+9-1Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,20 @@ class Event extends BaseEvent
2424
private $subject;
2525
private $marking;
2626
private $transition;
27+
private $parameters;
2728

2829
/**
2930
* @param object $subject
3031
* @param Marking $marking
3132
* @param Transition $transition
33+
* @param array $parameters
3234
*/
33-
public function __construct($subject, Marking $marking, Transition $transition)
35+
public function __construct($subject, Marking $marking, Transition $transition, array $parameters = array())
3436
{
3537
$this->subject = $subject;
3638
$this->marking = $marking;
3739
$this->transition = $transition;
40+
$this->parameters = $parameters;
3841
}
3942

4043
public function getMarking()
@@ -51,4 +54,9 @@ public function getTransition()
5154
{
5255
return $this->transition;
5356
}
57+
58+
public function getParameters()
59+
{
60+
return $this->parameters;
61+
}
5462
}

‎src/Symfony/Component/Workflow/Tests/WorkflowTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Workflow/Tests/WorkflowTest.php
+18-2Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,21 @@ public function testApplyWithEventDispatcher()
182182

183183
$marking = $workflow->apply($subject, 't1');
184184

185-
$this->assertSame($eventNameExpected, $eventDispatcher->dispatchedEvents);
185+
$this->assertSame($eventNameExpected, $eventDispatcher->dispatchedEventNames);
186+
}
187+
188+
public function testApplyWithEventDispatcherAndParameters()
189+
{
190+
$definition = $this->createComplexWorkflowDefinition();
191+
$subject = new \stdClass();
192+
$subject->marking = null;
193+
$eventDispatcher = new EventDispatcherMock();
194+
$workflow = new Workflow($definition, new MultipleStateMarkingStore(), $eventDispatcher, 'workflow_name');
195+
196+
$parameters = array('code' => '123');
197+
$marking = $workflow->apply($subject, 't1', $parameters);
198+
199+
$this->assertSame($parameters, $eventDispatcher->dispatchedEvents[0]->getParameters());
186200
}
187201

188202
public function testGetEnabledTransitions()
@@ -214,10 +228,12 @@ public function testGetEnabledTransitions()
214228
class EventDispatcherMock implements \Symfony\Component\EventDispatcher\EventDispatcherInterface
215229
{
216230
public $dispatchedEvents = array();
231+
public $dispatchedEventNames = array();
217232

218233
public function dispatch($eventName, \Symfony\Component\EventDispatcher\Event $event = null)
219234
{
220-
$this->dispatchedEvents[] = $eventName;
235+
$this->dispatchedEvents[] = $event;
236+
$this->dispatchedEventNames[] = $eventName;
221237
}
222238

223239
public function addListener($eventName, $listener, $priority = 0)

‎src/Symfony/Component/Workflow/Workflow.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Workflow/Workflow.php
+28-30Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -85,50 +85,47 @@ public function getMarking($subject)
8585
/**
8686
* Returns true if the transition is enabled.
8787
*
88-
* @param object $subject A subject
89-
* @param string $transitionName A transition
88+
* @param object $subject A subject
89+
* @param string $transitionName A transition
90+
* @param array $eventParameters
9091
*
9192
* @return bool true if the transition is enabled
92-
*
93-
* @throws LogicException If the transition does not exist
9493
*/
95-
public function can($subject, $transitionName)
94+
public function can($subject, $transitionName, array $eventParameters = array())
9695
{
9796
$transitions = $this->getTransitions($transitionName);
9897
$marking = $this->getMarking($subject);
9998

100-
return null !== $this->getTransitionForSubject($subject, $marking, $transitions);
99+
return null !== $this->getTransitionForSubject($subject, $marking, $transitions, $eventParameters);
101100
}
102101

103102
/**
104103
* Fire a transition.
105104
*
106-
* @param object $subject A subject
107-
* @param string $transitionName A transition
105+
* @param object $subject A subject
106+
* @param string $transitionName A transition
107+
* @param array $eventParameters
108108
*
109109
* @return Marking The new Marking
110-
*
111-
* @throws LogicException If the transition is not applicable
112-
* @throws LogicException If the transition does not exist
113110
*/
114-
public function apply($subject, $transitionName)
111+
public function apply($subject, $transitionName, array $eventParameters = array())
115112
{
116113
$transitions = $this->getTransitions($transitionName);
117114
$marking = $this->getMarking($subject);
118115

119-
if (null === $transition = $this->getTransitionForSubject($subject, $marking, $transitions)) {
116+
if (null === $transition = $this->getTransitionForSubject($subject, $marking, $transitions, $eventParameters)) {
120117
throw new LogicException(sprintf('Unable to apply transition "%s" for workflow "%s".', $transitionName, $this->name));
121118
}
122119

123-
$this->leave($subject, $transition, $marking);
120+
$this->leave($subject, $transition, $marking, $eventParameters);
124121

125-
$this->transition($subject, $transition, $marking);
122+
$this->transition($subject, $transition, $marking, $eventParameters);
126123

127-
$this->enter($subject, $transition, $marking);
124+
$this->enter($subject, $transition, $marking, $eventParameters);
128125

129126
$this->markingStore->setMarking($subject, $marking);
130127

131-
$this->announce($subject, $transition, $marking);
128+
$this->announce($subject, $transition, $marking, $eventParameters);
132129

133130
return $marking;
134131
}
@@ -174,13 +171,13 @@ public function getDefinition()
174171
*
175172
* @return bool|void boolean true if this transition is guarded, ie you cannot use it
176173
*/
177-
private function guardTransition($subject, Marking $marking, Transition $transition)
174+
private function guardTransition($subject, Marking $marking, Transition $transition, array $eventParameters = array())
178175
{
179176
if (null === $this->dispatcher) {
180177
return;
181178
}
182179

183-
$event = new GuardEvent($subject, $marking, $transition);
180+
$event = new GuardEvent($subject, $marking, $transition, $eventParameters);
184181

185182
$this->dispatcher->dispatch('workflow.guard', $event);
186183
$this->dispatcher->dispatch(sprintf('workflow.%s.guard', $this->name), $event);
@@ -189,10 +186,10 @@ private function guardTransition($subject, Marking $marking, Transition $transit
189186
return $event->isBlocked();
190187
}
191188

192-
private function leave($subject, Transition $transition, Marking $marking)
189+
private function leave($subject, Transition $transition, Marking $marking, array $eventParameters = array())
193190
{
194191
if (null !== $this->dispatcher) {
195-
$event = new Event($subject, $marking, $transition);
192+
$event = new Event($subject, $marking, $transition, $eventParameters);
196193

197194
$this->dispatcher->dispatch('workflow.leave', $event);
198195
$this->dispatcher->dispatch(sprintf('workflow.%s.leave', $this->name), $event);
@@ -207,23 +204,23 @@ private function leave($subject, Transition $transition, Marking $marking)
207204
}
208205
}
209206

210-
private function transition($subject, Transition $transition, Marking $marking)
207+
private function transition($subject, Transition $transition, Marking $marking, array $eventParameters = array())
211208
{
212209
if (null === $this->dispatcher) {
213210
return;
214211
}
215212

216-
$event = new Event($subject, $marking, $transition);
213+
$event = new Event($subject, $marking, $transition, $eventParameters);
217214

218215
$this->dispatcher->dispatch('workflow.transition', $event);
219216
$this->dispatcher->dispatch(sprintf('workflow.%s.transition', $this->name), $event);
220217
$this->dispatcher->dispatch(sprintf('workflow.%s.transition.%s', $this->name, $transition->getName()), $event);
221218
}
222219

223-
private function enter($subject, Transition $transition, Marking $marking)
220+
private function enter($subject, Transition $transition, Marking $marking, array $eventParameters = array())
224221
{
225222
if (null !== $this->dispatcher) {
226-
$event = new Event($subject, $marking, $transition);
223+
$event = new Event($subject, $marking, $transition, $eventParameters);
227224

228225
$this->dispatcher->dispatch('workflow.enter', $event);
229226
$this->dispatcher->dispatch(sprintf('workflow.%s.enter', $this->name), $event);
@@ -238,13 +235,13 @@ private function enter($subject, Transition $transition, Marking $marking)
238235
}
239236
}
240237

241-
private function announce($subject, Transition $initialTransition, Marking $marking)
238+
private function announce($subject, Transition $initialTransition, Marking $marking, array $eventParameters = array())
242239
{
243240
if (null === $this->dispatcher) {
244241
return;
245242
}
246243

247-
$event = new Event($subject, $marking, $initialTransition);
244+
$event = new Event($subject, $marking, $initialTransition, $eventParameters);
248245

249246
foreach ($this->definition->getTransitions() as $transition) {
250247
if (null !== $this->getTransitionForSubject($subject, $marking, array($transition))) {
@@ -281,10 +278,11 @@ private function getTransitions($transitionName)
281278
* @param object $subject
282279
* @param Marking $marking
283280
* @param Transition[] $transitions
281+
* @param array $eventParameters
284282
*
285-
* @return Transition|null
283+
* @return null|Transition
286284
*/
287-
private function getTransitionForSubject($subject, Marking $marking, array $transitions)
285+
private function getTransitionForSubject($subject, Marking $marking, array $transitions, array $eventParameters = array())
288286
{
289287
foreach ($transitions as $transition) {
290288
foreach ($transition->getFroms() as $place) {
@@ -293,7 +291,7 @@ private function getTransitionForSubject($subject, Marking $marking, array $tran
293291
}
294292
}
295293

296-
if (true !== $this->guardTransition($subject, $marking, $transition)) {
294+
if (true !== $this->guardTransition($subject, $marking, $transition, $eventParameters)) {
297295
return $transition;
298296
}
299297
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.