2 namespace TYPO3\CMS\Extbase\Mvc\Controller;
18 use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
19 use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException;
133 $className = get_class($this);
134 if (strpos($className,
'\\') !==
false) {
135 $classNameParts = explode(
'\\', $className, 4);
137 if (strpos($className,
'TYPO3\\CMS\\') === 0) {
138 $this->extensionName = $classNameParts[2];
140 $this->extensionName = $classNameParts[1];
143 list(, $this->extensionName) = explode(
'_', $className);
166 $this->arguments = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Controller\Arguments::class);
181 public function addFlashMessage($messageBody, $messageTitle =
'', $severity = \TYPO3\CMS\Core\Messaging\AbstractMessage::OK, $storeInSession =
true)
183 if (!is_string($messageBody)) {
184 throw new \InvalidArgumentException(
'The message body must be of type string, "' . gettype($messageBody) .
'" given.', 1243258395);
187 $flashMessage = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(
188 \TYPO3\CMS\Core\Messaging\FlashMessage::class, $messageBody, $messageTitle, $severity, $storeInSession
190 $this->controllerContext->getFlashMessageQueue()->enqueue($flashMessage);
206 foreach ($this->supportedRequestTypes as $supportedRequestType) {
207 if ($request instanceof $supportedRequestType) {
226 throw new UnsupportedRequestTypeException(get_class($this) .
' does not support requests of type "' . get_class($request) .
'". Supported types are: ' . implode(
' ', $this->supportedRequestTypes), 1187701132);
228 if ($response instanceof \TYPO3\CMS\Extbase\Mvc\Web\
Response && $request instanceof WebRequest) {
229 $response->setRequest($request);
232 $this->request->setDispatched(
true);
234 $this->uriBuilder = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder::class);
235 $this->uriBuilder->setRequest($request);
236 $this->initializeControllerArgumentsBaseValidators();
237 $this->mapRequestArgumentsToControllerArguments();
238 $this->controllerContext = $this->buildControllerContext();
247 protected function buildControllerContext()
250 $controllerContext = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\Controller\ControllerContext::class);
253 if ($this->arguments !== null) {
278 $this->request->setDispatched(
false);
279 if ($this->request instanceof WebRequest) {
280 $this->request->setControllerActionName($actionName);
281 if ($controllerName !== null) {
282 $this->request->setControllerName($controllerName);
317 if (!$this->request instanceof WebRequest) {
320 if ($controllerName === null) {
321 $controllerName = $this->request->getControllerName();
323 $this->uriBuilder->reset()->setTargetPageUid($pageUid)->setCreateAbsoluteUri(
true);
324 if (\TYPO3\CMS\Core\Utility\GeneralUtility::getIndpEnv(
'TYPO3_SSL')) {
325 $this->uriBuilder->setAbsoluteUriScheme(
'https');
345 if (!$this->request instanceof WebRequest) {
349 $this->objectManager->get(\TYPO3\CMS\Extbase\Service\CacheService::class)->clearCachesOfRegisteredPageIds();
352 $escapedUri = htmlentities($uri, ENT_QUOTES,
'utf-8');
353 $this->response->setContent(
'<html><head><meta http-equiv="refresh" content="' . (
int)$delay .
';url=' . $escapedUri .
'"/></head></html>');
354 if ($this->response instanceof \TYPO3\CMS\Extbase\Mvc\Web\
Response) {
355 $this->response->setStatus($statusCode);
356 $this->response->setHeader(
'Location', (
string)$uri);
369 return \TYPO3\CMS\Core\Utility\GeneralUtility::locationHeaderUrl((
string)$uri);
384 public function throwStatus($statusCode, $statusMessage = null, $content = null)
386 if (!$this->request instanceof WebRequest) {
389 if ($this->response instanceof \TYPO3\CMS\Extbase\Mvc\Web\
Response) {
390 $this->response->setStatus($statusCode, $statusMessage);
391 if ($content === null) {
392 $content = $this->response->getStatus();
395 $this->response->setContent($content);
405 public function initializeControllerArgumentsBaseValidators()
408 foreach ($this->arguments as $argument) {
409 $validator = $this->validatorResolver->getBaseValidatorConjunction($argument->getDataType());
410 if ($validator !== null) {
411 $argument->setValidator($validator);
422 protected function mapRequestArgumentsToControllerArguments()
425 foreach ($this->arguments as $argument) {
426 $argumentName = $argument->getName();
427 if ($this->request->hasArgument($argumentName)) {
428 $argument->setValue($this->request->getArgument($argumentName));
429 }
elseif ($argument->isRequired()) {
430 throw new \TYPO3\CMS\Extbase\Mvc\Controller\Exception\RequiredArgumentMissingException(
'Required argument "' . $argumentName .
'" is not set for ' . $this->request->getControllerObjectName() .
'->' . $this->request->getControllerActionName() .
'.', 1298012500);