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 f44fc7c

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

File tree

3 files changed

+52
-42
lines changed
Filter options

3 files changed

+52
-42
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Workflow/Event/Event.php
+6-10Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,28 +11,29 @@
1111

1212
namespace Symfony\Component\Workflow\Event;
1313

14-
use Symfony\Component\EventDispatcher\Event as BaseEvent;
14+
use Symfony\Component\EventDispatcher\GenericEvent;
1515
use Symfony\Component\Workflow\Marking;
1616
use Symfony\Component\Workflow\Transition;
1717

1818
/**
1919
* @author Fabien Potencier <fabien@symfony.com>
2020
* @author Grégoire Pineau <lyrixx@lyrixx.info>
2121
*/
22-
class Event extends BaseEvent
22+
class Event extends GenericEvent
2323
{
24-
private $subject;
2524
private $marking;
2625
private $transition;
2726

2827
/**
2928
* @param object $subject
3029
* @param Marking $marking
3130
* @param Transition $transition
31+
* @param array $arguments
3232
*/
33-
public function __construct($subject, Marking $marking, Transition $transition)
33+
public function __construct($subject, Marking $marking, Transition $transition, array $arguments = array())
3434
{
35-
$this->subject = $subject;
35+
parent::__construct($subject, $arguments);
36+
3637
$this->marking = $marking;
3738
$this->transition = $transition;
3839
}
@@ -42,11 +43,6 @@ public function getMarking()
4243
return $this->marking;
4344
}
4445

45-
public function getSubject()
46-
{
47-
return $this->subject;
48-
}
49-
5046
public function getTransition()
5147
{
5248
return $this->transition;

‎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 testApplyWithEventDispatcherAndEventArguments()
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+
$arguments = array('code' => '123');
197+
$marking = $workflow->apply($subject, 't1', $arguments);
198+
199+
$this->assertSame($arguments, $eventDispatcher->dispatchedEvents[0]->getArguments());
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 $eventArguments
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 $eventArguments = 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, $eventArguments);
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 $eventArguments
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 $eventArguments = 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, $eventArguments)) {
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, $eventArguments);
124121

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

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

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

131-
$this->announce($subject, $transition, $marking);
128+
$this->announce($subject, $transition, $marking, $eventArguments);
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 $eventArguments = 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, $eventArguments);
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 $eventArguments = array())
193190
{
194191
if (null !== $this->dispatcher) {
195-
$event = new Event($subject, $marking, $transition);
192+
$event = new Event($subject, $marking, $transition, $eventArguments);
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 $eventArguments = 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, $eventArguments);
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 $eventArguments = array())
224221
{
225222
if (null !== $this->dispatcher) {
226-
$event = new Event($subject, $marking, $transition);
223+
$event = new Event($subject, $marking, $transition, $eventArguments);
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 $eventArguments = 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, $eventArguments);
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 $eventArguments
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 $eventArguments = 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, $eventArguments)) {
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.