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 de976d7

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

File tree

3 files changed

+51
-27
lines changed
Filter options

3 files changed

+51
-27
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
+24-24Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -87,48 +87,47 @@ public function getMarking($subject)
8787
*
8888
* @param object $subject A subject
8989
* @param string $transitionName A transition
90+
* @param array $eventParameters
9091
*
9192
* @return bool true if the transition is enabled
9293
*
93-
* @throws LogicException If the transition does not exist
9494
*/
95-
public function can($subject, $transitionName)
95+
public function can($subject, $transitionName, array $eventParameters = array())
9696
{
9797
$transitions = $this->getTransitions($transitionName);
9898
$marking = $this->getMarking($subject);
9999

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

103103
/**
104104
* Fire a transition.
105105
*
106106
* @param object $subject A subject
107107
* @param string $transitionName A transition
108+
* @param array $eventParameters
108109
*
109110
* @return Marking The new Marking
110111
*
111-
* @throws LogicException If the transition is not applicable
112-
* @throws LogicException If the transition does not exist
113112
*/
114-
public function apply($subject, $transitionName)
113+
public function apply($subject, $transitionName, array $eventParameters = array())
115114
{
116115
$transitions = $this->getTransitions($transitionName);
117116
$marking = $this->getMarking($subject);
118117

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

123-
$this->leave($subject, $transition, $marking);
122+
$this->leave($subject, $transition, $marking, $eventParameters);
124123

125-
$this->transition($subject, $transition, $marking);
124+
$this->transition($subject, $transition, $marking, $eventParameters);
126125

127-
$this->enter($subject, $transition, $marking);
126+
$this->enter($subject, $transition, $marking, $eventParameters);
128127

129128
$this->markingStore->setMarking($subject, $marking);
130129

131-
$this->announce($subject, $transition, $marking);
130+
$this->announce($subject, $transition, $marking, $eventParameters);
132131

133132
return $marking;
134133
}
@@ -174,13 +173,13 @@ public function getDefinition()
174173
*
175174
* @return bool|void boolean true if this transition is guarded, ie you cannot use it
176175
*/
177-
private function guardTransition($subject, Marking $marking, Transition $transition)
176+
private function guardTransition($subject, Marking $marking, Transition $transition, array $eventParameters = array())
178177
{
179178
if (null === $this->dispatcher) {
180179
return;
181180
}
182181

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

185184
$this->dispatcher->dispatch('workflow.guard', $event);
186185
$this->dispatcher->dispatch(sprintf('workflow.%s.guard', $this->name), $event);
@@ -189,10 +188,10 @@ private function guardTransition($subject, Marking $marking, Transition $transit
189188
return $event->isBlocked();
190189
}
191190

192-
private function leave($subject, Transition $transition, Marking $marking)
191+
private function leave($subject, Transition $transition, Marking $marking, array $eventParameters = array())
193192
{
194193
if (null !== $this->dispatcher) {
195-
$event = new Event($subject, $marking, $transition);
194+
$event = new Event($subject, $marking, $transition, $eventParameters);
196195

197196
$this->dispatcher->dispatch('workflow.leave', $event);
198197
$this->dispatcher->dispatch(sprintf('workflow.%s.leave', $this->name), $event);
@@ -207,23 +206,23 @@ private function leave($subject, Transition $transition, Marking $marking)
207206
}
208207
}
209208

210-
private function transition($subject, Transition $transition, Marking $marking)
209+
private function transition($subject, Transition $transition, Marking $marking, array $eventParameters = array())
211210
{
212211
if (null === $this->dispatcher) {
213212
return;
214213
}
215214

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

218217
$this->dispatcher->dispatch('workflow.transition', $event);
219218
$this->dispatcher->dispatch(sprintf('workflow.%s.transition', $this->name), $event);
220219
$this->dispatcher->dispatch(sprintf('workflow.%s.transition.%s', $this->name, $transition->getName()), $event);
221220
}
222221

223-
private function enter($subject, Transition $transition, Marking $marking)
222+
private function enter($subject, Transition $transition, Marking $marking, array $eventParameters = array())
224223
{
225224
if (null !== $this->dispatcher) {
226-
$event = new Event($subject, $marking, $transition);
225+
$event = new Event($subject, $marking, $transition, $eventParameters);
227226

228227
$this->dispatcher->dispatch('workflow.enter', $event);
229228
$this->dispatcher->dispatch(sprintf('workflow.%s.enter', $this->name), $event);
@@ -238,13 +237,13 @@ private function enter($subject, Transition $transition, Marking $marking)
238237
}
239238
}
240239

241-
private function announce($subject, Transition $initialTransition, Marking $marking)
240+
private function announce($subject, Transition $initialTransition, Marking $marking, array $eventParameters = array())
242241
{
243242
if (null === $this->dispatcher) {
244243
return;
245244
}
246245

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

249248
foreach ($this->definition->getTransitions() as $transition) {
250249
if (null !== $this->getTransitionForSubject($subject, $marking, array($transition))) {
@@ -281,10 +280,11 @@ private function getTransitions($transitionName)
281280
* @param object $subject
282281
* @param Marking $marking
283282
* @param Transition[] $transitions
283+
* @param array $eventParameters
284284
*
285-
* @return Transition|null
285+
* @return null|Transition
286286
*/
287-
private function getTransitionForSubject($subject, Marking $marking, array $transitions)
287+
private function getTransitionForSubject($subject, Marking $marking, array $transitions, array $eventParameters = array())
288288
{
289289
foreach ($transitions as $transition) {
290290
foreach ($transition->getFroms() as $place) {
@@ -293,7 +293,7 @@ private function getTransitionForSubject($subject, Marking $marking, array $tran
293293
}
294294
}
295295

296-
if (true !== $this->guardTransition($subject, $marking, $transition)) {
296+
if (true !== $this->guardTransition($subject, $marking, $transition, $eventParameters)) {
297297
return $transition;
298298
}
299299
}

0 commit comments

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