2 namespace TYPO3\CMS\Form\Controller;
92 $this->formUtility = FormUtility::create($this->configuration);
93 $this->validationBuilder = ValidationBuilder::create($this->configuration);
94 $this->validationBuilder->setFormUtility($this->formUtility);
95 $this->formBuilder = FormBuilder::create($this->configuration);
96 $this->formBuilder->setValidationBuilder($this->validationBuilder);
97 $this->formBuilder->setFormUtility($this->formUtility);
98 $this->typoscript = $this->settings[
'typoscript'];
101 $this->sessionUtility->initSession($this->configuration->getPrefix());
104 if ($this->request->hasArgument($this->configuration->getPrefix())) {
105 $this->skipValidation =
false;
106 $argument = $this->request->getArgument($this->configuration->getPrefix());
107 $this->request->setArgument(
'model', $argument);
111 $this->skipValidation =
true;
112 $this->request->setArgument(
'model', array());
124 $validationResults = $this->request->getOriginalRequestMappingResults()->forProperty(
'model');
125 if (!$validationResults->hasErrors()) {
129 $this->validationBuilder->buildRules();
132 $this->formBuilder->setValidationErrors($validationResults);
164 ->setConfiguration($this->configuration);
178 if ($incomingData !== null) {
179 $this->controllerContext->setValidationElement($incomingData);
181 $form = $this->formBuilder->buildModel();
182 $this->view->assign(
'model', $form);
197 $this->sessionUtility->destroySession();
200 $this->controllerContext->setValidationElement($model);
201 $form = $this->formBuilder->buildModel();
203 $this->sessionUtility->storeSession();
204 $this->view->assign(
'model', $form);
206 $message = $this->formUtility->renderItem(
207 $this->typoscript[
'confirmation.'][
'message.'],
208 $this->typoscript[
'confirmation.'][
'message'],
211 $this->view->assign(
'message', $message);
224 if ($this->request->hasArgument(
'confirmation-true')) {
225 $this->
forward(
'process', null, null, array($this->configuration->getPrefix() => $this->request->getArgument(
'model')));
227 $this->sessionUtility->destroySession();
228 $this->
forward(
'show', null, null, array(
'incomingData' => $this->request->getArgument(
'model')));
244 $this->controllerContext->setValidationElement($model);
245 $form = $this->formBuilder->buildModel();
246 $postProcessorTypoScript = array();
247 if (isset($this->typoscript[
'postProcessor.'])) {
248 $postProcessorTypoScript = $this->typoscript[
'postProcessor.'];
252 $postProcessor = $this->objectManager->get(
253 \TYPO3\CMS\Form\PostProcess\PostProcessor::class,
254 $form, $postProcessorTypoScript
256 $postProcessor->setControllerContext($this->controllerContext);
259 $content = $postProcessor->process();
260 $this->sessionUtility->destroySession();
261 $this->
forward(
'afterProcess', null, null, array(
'postProcessorContent' => $content));
272 $this->view->assign(
'postProcessorContent', $postProcessorContent);
289 !$this->request->hasArgument($this->configuration->getPrefix())
290 && !$this->sessionUtility->getSessionData()
304 if ($this->skipValidation || !$this->arguments->hasArgument(
'model')) {
308 $this->validationBuilder->buildRules($this->request->getArgument(
'model'));
309 $this->setDynamicValidation($this->validationBuilder->getRules());
310 $this->skipValidation =
false;
320 protected function setDynamicValidation(array $toValidate = array())
324 $validatorResolver = $this->objectManager->get(\TYPO3\CMS\Extbase\Validation\ValidatorResolver::class);
327 $modelValidator =
$validatorResolver->createValidator(\TYPO3\CMS\Form\Domain\Validator\ValidationElementValidator::class);
328 foreach ($toValidate as $propertyName => $validations) {
329 foreach ($validations as $validation) {
330 if (empty($validation[
'validator'])) {
331 throw new \TYPO3\CMS\Extbase\Validation\Exception\NoSuchValidatorException(
'Invalid validate configuration for ' . $propertyName .
': Could not resolve class name for validator "' . $validation[
'validatorName'] .
'".', 1441893777);
333 $modelValidator->addPropertyValidator($propertyName, $validation[
'validator']);
337 if ($modelValidator->countPropertyValidators()) {
339 $baseConjunctionValidator = $this->arguments->getArgument(
'model')->getValidator();
340 if ($baseConjunctionValidator === null) {
341 $baseConjunctionValidator =
$validatorResolver->createValidator(\TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator::class);
342 $this->arguments->getArgument(
'model')->setValidator($baseConjunctionValidator);
344 $baseConjunctionValidator->addValidator($modelValidator);