first commit
This commit is contained in:
commit
1218dd1517
12716 files changed
+989233
No files matched your search
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
namespace TYPO3\CMS\Extbase\Mvc;
|
||||
|
||||
/*
|
||||
* This file is part of the TYPO3 CMS project.
|
||||
*
|
||||
* It is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, either version 2
|
||||
* of the License, or any later version.
|
||||
*
|
||||
* For the full copyright and license information, please read the
|
||||
* LICENSE.txt file that was distributed with this source code.
|
||||
*
|
||||
* The TYPO3 project - inspiring people to share!
|
||||
*/
|
||||
|
||||
/**
|
||||
* Dispatches requests to the controller which was specified by the request and
|
||||
* returns the response the controller generated.
|
||||
* @internal only to be used within Extbase, not part of TYPO3 Core API.
|
||||
*/
|
||||
class Dispatcher implements \TYPO3\CMS\Core\SingletonInterface
|
||||
{
|
||||
/**
|
||||
* @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface A reference to the object manager
|
||||
*/
|
||||
protected $objectManager;
|
||||
|
||||
/**
|
||||
* @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher
|
||||
*/
|
||||
protected $signalSlotDispatcher;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $settings = [];
|
||||
|
||||
/**
|
||||
* @param \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher
|
||||
*/
|
||||
public function injectSignalSlotDispatcher(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher)
|
||||
{
|
||||
$this->signalSlotDispatcher = $signalSlotDispatcher;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs the global dispatcher
|
||||
*
|
||||
* @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager A reference to the object manager
|
||||
*/
|
||||
public function __construct(\TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager)
|
||||
{
|
||||
$this->objectManager = $objectManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dispatches a request to a controller and initializes the security framework.
|
||||
*
|
||||
* @param \TYPO3\CMS\Extbase\Mvc\RequestInterface $request The request to dispatch
|
||||
* @param \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response The response, to be modified by the controller
|
||||
* @throws Exception\InfiniteLoopException
|
||||
*/
|
||||
public function dispatch(\TYPO3\CMS\Extbase\Mvc\RequestInterface $request, \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response)
|
||||
{
|
||||
$dispatchLoopCount = 0;
|
||||
while (!$request->isDispatched()) {
|
||||
if ($dispatchLoopCount++ > 99) {
|
||||
throw new \TYPO3\CMS\Extbase\Mvc\Exception\InfiniteLoopException('Could not ultimately dispatch the request after ' . $dispatchLoopCount . ' iterations. Most probably, a @' . \TYPO3\CMS\Extbase\Annotation\IgnoreValidation::class . ' annotation is missing on re-displaying a form with validation errors.', 1217839467);
|
||||
}
|
||||
$controller = $this->resolveController($request);
|
||||
try {
|
||||
$controller->processRequest($request, $response);
|
||||
} catch (\TYPO3\CMS\Extbase\Mvc\Exception\StopActionException $ignoredException) {
|
||||
}
|
||||
}
|
||||
$this->emitAfterRequestDispatchSignal($request, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Emits a signal after a request was dispatched
|
||||
*
|
||||
* @param RequestInterface $request
|
||||
* @param ResponseInterface $response
|
||||
*/
|
||||
protected function emitAfterRequestDispatchSignal(\TYPO3\CMS\Extbase\Mvc\RequestInterface $request, \TYPO3\CMS\Extbase\Mvc\ResponseInterface $response)
|
||||
{
|
||||
$this->signalSlotDispatcher->dispatch(__CLASS__, 'afterRequestDispatch', [$request, $response]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds and instanciates a controller that matches the current request.
|
||||
* If no controller can be found, an instance of NotFoundControllerInterface is returned.
|
||||
*
|
||||
* @param \TYPO3\CMS\Extbase\Mvc\RequestInterface $request The request to dispatch
|
||||
* @throws Exception\InvalidControllerException
|
||||
* @return \TYPO3\CMS\Extbase\Mvc\Controller\ControllerInterface
|
||||
*/
|
||||
protected function resolveController(\TYPO3\CMS\Extbase\Mvc\RequestInterface $request)
|
||||
{
|
||||
$controllerObjectName = $request->getControllerObjectName();
|
||||
$controller = $this->objectManager->get($controllerObjectName);
|
||||
if (!$controller instanceof \TYPO3\CMS\Extbase\Mvc\Controller\ControllerInterface) {
|
||||
throw new \TYPO3\CMS\Extbase\Mvc\Exception\InvalidControllerException(
|
||||
'Invalid controller "' . $request->getControllerObjectName() . '". The controller must implement the TYPO3\\CMS\\Extbase\\Mvc\\Controller\\ControllerInterface.',
|
||||
1476109646
|
||||
);
|
||||
}
|
||||
return $controller;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user