示例#1
0
 /**
  * Matches a \F3\FLOW3\MVC\RequestInterface against its set URL pattern rules
  *
  * @param \F3\FLOW3\MVC\RequestInterface $request The request that should be matched
  * @return boolean TRUE if the pattern matched, FALSE otherwise
  * @throws \F3\FLOW3\Security\Exception\RequestTypeNotSupportedException
  * @author Andreas Förthner <*****@*****.**>
  */
 public function matchRequest(\F3\FLOW3\MVC\RequestInterface $request)
 {
     if (!$request instanceof \F3\FLOW3\MVC\Web\Request) {
         throw new \F3\FLOW3\Security\Exception\RequestTypeNotSupportedException('The given request type is not supported.', 1216903641);
     }
     return (bool) preg_match('/^' . str_replace('/', '\\/', $this->uriPattern) . '$/', $request->getRequestUri()->getPath());
 }
 /**
  * Maps arguments delivered by the request object to the local controller arguments.
  *
  * @return void
  * @author Robert Lemke <*****@*****.**>
  */
 protected function mapRequestArgumentsToControllerArguments()
 {
     $optionalArgumentNames = array();
     $allArgumentNames = $this->arguments->getArgumentNames();
     foreach ($allArgumentNames as $argumentName) {
         if ($this->arguments[$argumentName]->isRequired() === FALSE) {
             $optionalArgumentNames[] = $argumentName;
         }
     }
     $validator = $this->objectManager->getObject('F3\\FLOW3\\MVC\\Controller\\ArgumentsValidator');
     $this->propertyMapper->mapAndValidate($allArgumentNames, $this->request->getArguments(), $this->arguments, $optionalArgumentNames, $validator);
     $this->argumentsMappingResults = $this->propertyMapper->getMappingResults();
 }
 /**
  * Matches a \F3\FLOW3\MVC\RequestInterface against its set controller object name pattern rules
  *
  * @param \F3\FLOW3\MVC\RequestInterface $request The request that should be matched
  * @return boolean TRUE if the pattern matched, FALSE otherwise
  * @throws \F3\FLOW3\Security\Exception\RequestTypeNotSupportedException
  * @author Andreas Förthner <*****@*****.**>
  */
 public function matchRequest(\F3\FLOW3\MVC\RequestInterface $request)
 {
     return (bool) preg_match('/^' . str_replace('\\', '\\\\', $this->controllerObjectNamePattern) . '$/', $request->getControllerObjectName());
 }
示例#4
0
 /**
  * Ext Direct does not provide named arguments by now, so we have
  * to map them by reflecting on the action parameters.
  *
  * @param RequestInterface $dispatchRequest
  * @param Transaction $transaction
  * @return array The mapped arguments
  */
 protected function getArgumentsFromTransaction(\F3\FLOW3\MVC\RequestInterface $dispatchRequest, \F3\ExtJS\ExtDirect\Transaction $transaction)
 {
     if (!$transaction->getDirectRequest()->isFormPost()) {
         $controllerClass = $dispatchRequest->getControllerObjectName();
         $parameters = $this->reflectionService->getMethodParameters($controllerClass, $dispatchRequest->getControllerActionName() . 'Action');
         return $transaction->mapDataToParameters($parameters);
     } else {
         // TODO Reuse setArgumentsFromRawRequestData from Web/RequestBuilder
     }
 }
 /**
  * Finds and instanciates a controller that matches the current request.
  * If no controller can be found, an instance of NotFoundControllerInterface is returned.
  *
  * @param \F3\FLOW3\MVC\RequestInterface $request The request to dispatch
  * @return \F3\FLOW3\MVC\Controller\ControllerInterface
  * @author Bastian Waidelich <*****@*****.**>
  */
 protected function resolveController(\F3\FLOW3\MVC\RequestInterface $request)
 {
     $exception = NULL;
     $packageKey = $request->getControllerPackageKey();
     if (!$this->packageManager->isPackageAvailable($packageKey)) {
         $exception = new \F3\FLOW3\MVC\Controller\Exception\InvalidPackageException($request, 'package "' . $packageKey . '" does not exist');
     } elseif (!$this->packageManager->isPackageActive($packageKey)) {
         $exception = new \F3\FLOW3\MVC\Controller\Exception\InactivePackageException($request, 'package "' . $packageKey . '" is not active');
     } else {
         $controllerObjectName = $request->getControllerObjectName();
         if ($controllerObjectName === '') {
             $exception = new \F3\FLOW3\MVC\Controller\Exception\InvalidControllerException($request, 'no controller could be resolved which would match your request');
         }
     }
     if ($exception !== NULL) {
         $controller = $this->objectManager->getObject($this->settings['mvc']['notFoundController']);
         if (!$controller instanceof \F3\FLOW3\MVC\Controller\NotFoundControllerInterface) {
             throw new \F3\FLOW3\MVC\Exception\InvalidControllerException('The NotFoundController must implement "\\F3\\FLOW3\\MVC\\Controller\\NotFoundControllerInterface", ' . (is_object($controller) ? get_class($controller) : gettype($controller)) . ' given.', 1246714416);
         }
         $controller->setException($exception);
     } else {
         $controller = $this->objectManager->getObject($controllerObjectName);
         if (!$controller instanceof \F3\FLOW3\MVC\Controller\ControllerInterface) {
             throw new \F3\FLOW3\MVC\Exception\InvalidControllerException('Invalid controller "' . $request->getControllerObjectName() . '". The controller must be a valid request handling controller, ' . (is_object($controller) ? get_class($controller) : gettype($controller)) . ' given.', 1202921619);
         }
     }
     return $controller;
 }