-
Notifications
You must be signed in to change notification settings - Fork 126
Expand file tree
/
Copy pathFormFlowController.php
More file actions
161 lines (134 loc) · 5.36 KB
/
Copy pathFormFlowController.php
File metadata and controls
161 lines (134 loc) · 5.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?php
namespace Craue\FormFlowBundle\Tests\IntegrationTestBundle\Controller;
use Craue\FormFlowBundle\Form\FormFlow;
use Craue\FormFlowBundle\Tests\IntegrationTestBundle\Entity\Issue149Data;
use Craue\FormFlowBundle\Tests\IntegrationTestBundle\Entity\Issue64Data;
use Craue\FormFlowBundle\Tests\IntegrationTestBundle\Entity\PhotoUpload;
use Craue\FormFlowBundle\Tests\IntegrationTestBundle\Entity\RevalidatePreviousStepsData;
use Craue\FormFlowBundle\Tests\IntegrationTestBundle\Entity\Topic;
use Craue\FormFlowBundle\Tests\IntegrationTestBundle\Entity\Vehicle;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
/**
* @author Christian Raue <christian.raue@gmail.com>
* @copyright 2011-2015 Christian Raue
* @license http://opensource.org/licenses/mit-license.php MIT License
*/
class FormFlowController extends Controller {
/**
* @Route("/create-topic/", name="_FormFlow_createTopic")
*/
public function createTopicAction() {
return $this->processFlow(new Topic(), $this->get('integrationTestBundle.form.flow.createTopic'));
}
/**
* @Route("/create-topic-redirect-after-submit/", name="_FormFlow_createTopic_redirectAfterSubmit")
*/
public function createTopicRedirectAfterSubmitAction() {
$flow = $this->get('integrationTestBundle.form.flow.createTopic');
$flow->setAllowDynamicStepNavigation(false);
$flow->setAllowRedirectAfterSubmit(true);
return $this->processFlow(new Topic(), $flow);
}
/**
* @Route("/create-vehicle/", name="_FormFlow_createVehicle")
*/
public function createVehicleAction() {
return $this->processFlow(new Vehicle(), $this->get('integrationTestBundle.form.flow.createVehicle'));
}
/**
* @Route("/demo1/", name="_FormFlow_demo1")
*/
public function demo1Action() {
return $this->processFlow(new \stdClass(), $this->get('integrationTestBundle.form.flow.demo1'));
}
/**
* @Route("/issue64/", name="_FormFlow_issue64")
*/
public function issue64Action() {
return $this->processFlow(new Issue64Data(), $this->get('integrationTestBundle.form.flow.issue64'));
}
/**
* No trailing slash here to add the step only when needed.
* @Route("/issue87/{step}", defaults={"step"=1}, name="_FormFlow_issue87")
*/
public function issue87Action() {
return $this->processFlow(new \stdClass(), $this->get('integrationTestBundle.form.flow.issue87'));
}
/**
* @Route("/issue149/", name="_FormFlow_issue149")
*/
public function issue149Action() {
return $this->processFlow(new Issue149Data(), $this->get('integrationTestBundle.form.flow.issue149'));
}
/**
* @Route("/revalidatePreviousSteps/enabled/", defaults={"enabled"=true}, name="_FormFlow_revalidatePreviousSteps_enabled")
* @Route("/revalidatePreviousSteps/disabled/", defaults={"enabled"=false}, name="_FormFlow_revalidatePreviousSteps_disabled")
*/
public function revalidatePreviousStepsAction($enabled) {
$flow = $this->get('integrationTestBundle.form.flow.revalidatePreviousSteps');
$flow->setRevalidatePreviousSteps($enabled);
return $this->processFlow(new RevalidatePreviousStepsData(), $flow);
}
/**
* @Route("/skipFirstStepUsingClosure/", name="_FormFlow_skipFirstStepUsingClosure")
*/
public function skipFirstStepUsingClosureAction() {
return $this->processFlow(new \stdClass(), $this->get('integrationTestBundle.form.flow.skipFirstStepUsingClosure'));
}
/**
* @Route("/removeSecondStepSkipMarkOnReset/", name="_FormFlow_removeSecondStepSkipMarkOnReset")
*/
public function removeSecondStepSkipMarkOnResetAction() {
return $this->processFlow(new \stdClass(), $this->get('integrationTestBundle.form.flow.removeSecondStepSkipMarkOnReset'));
}
/**
* @Route("/onlyOneStep/", name="_FormFlow_onlyOneStep")
*/
public function onlyOneStepAction() {
return $this->processFlow(new \stdClass(), $this->get('integrationTestBundle.form.flow.onlyOneStep'));
}
/**
* @Route("/photoUpload/", name="_FormFlow_photoUpload")
*/
public function photoUploadAction() {
return $this->processFlow(new PhotoUpload(), $this->get('integrationTestBundle.form.flow.photoUpload'),
'IntegrationTestBundle:FormFlow:photoUpload.html.twig');
}
protected function processFlow($formData, FormFlow $flow, $template = 'IntegrationTestBundle::layout_flow.html.twig') {
$flow->bind($formData);
$form = $submittedForm = $flow->createForm();
if ($flow->isValid($submittedForm)) {
$flow->saveCurrentStepData($submittedForm);
if ($flow->nextStep()) {
// create form for next step
$form = $flow->createForm();
} else {
// flow finished
$flow->reset();
return new JsonResponse($formData);
}
}
if ($flow->redirectAfterSubmit($submittedForm)) {
$request = $this->getCurrentRequest();
$params = $this->get('craue_formflow_util')->addRouteParameters(array_merge($request->query->all(),
$request->attributes->get('_route_params')), $flow);
return $this->redirect($this->generateUrl($request->attributes->get('_route'), $params));
}
return $this->render($template, array(
'form' => $form->createView(),
'flow' => $flow,
'formData' => $formData,
));
}
protected function getCurrentRequest() {
if ($this->has('request_stack')) {
return $this->get('request_stack')->getCurrentRequest();
}
// TODO remove as soon as Symfony >= 2.4 is required
if ($this->has('request')) {
return $this->get('request');
}
}
}