/** * Routes the specified web request by setting the controller name, action and possible * parameters. If the request could not be routed, it will be left untouched. * * @param \TYPO3\FLOW3\Http\Request $httpRequest The web request to be analyzed. Will be modified by the router. * @return \TYPO3\FLOW3\Mvc\ActionRequest */ public function route(\TYPO3\FLOW3\Http\Request $httpRequest) { $this->actionRequest = $httpRequest->createActionRequest(); $routePath = substr($httpRequest->getUri()->getPath(), strlen($httpRequest->getBaseUri()->getPath())); $matchResults = $this->findMatchResults($routePath); if ($matchResults !== NULL) { $requestArguments = $this->actionRequest->getArguments(); $mergedArguments = Arrays::arrayMergeRecursiveOverrule($requestArguments, $matchResults); $this->actionRequest->setArguments($mergedArguments); } $this->setDefaultControllerAndActionNameIfNoneSpecified(); return $this->actionRequest; }
/** * Updates the username and password credentials from the POST vars, if the POST parameters * are available. Sets the authentication status to REAUTHENTICATION_NEEDED, if credentials have been sent. * * @param \TYPO3\FLOW3\Mvc\ActionRequest $actionRequest The current action request instance * @return void */ public function updateCredentials(\TYPO3\FLOW3\Mvc\ActionRequest $actionRequest) { $getArguments = $actionRequest->getArguments(); if (!empty($getArguments['user']) && !empty($getArguments['signature']) && !empty($getArguments['expires']) && !empty($getArguments['version']) && !empty($getArguments['tpa_id']) && !empty($getArguments['action']) && !empty($getArguments['flags']) && !empty($getArguments['userdata'])) { $this->credentials['username'] = $getArguments['user']; $this->credentials['signature'] = \TYPO3\FLOW3\Utility\TypeHandling::hex2bin($getArguments['signature']); $this->credentials['expires'] = $getArguments['expires']; $this->credentials['version'] = $getArguments['version']; $this->credentials['tpaId'] = $getArguments['tpa_id']; $this->credentials['action'] = $getArguments['action']; $this->credentials['flags'] = $getArguments['flags']; $this->credentials['userdata'] = $getArguments['userdata']; $this->setAuthenticationStatus(self::AUTHENTICATION_NEEDED); } }
/** * Merges specified arguments with arguments from request. * * If $this->request is no sub request, request arguments will only be merged if $this->addQueryString is set. * Otherwise all request arguments except for the ones prefixed with the current request argument namespace will * be merged. Additionally special arguments (PackageKey, SubpackageKey, ControllerName & Action) are merged. * * The argument provided through the $arguments parameter always overrule the request * arguments. * * The request hierarchy is structured as follows: * root (HTTP) > main (Action) > sub (Action) > sub sub (Action) * * @param array $arguments * @return void */ protected function mergeArgumentsWithRequestArguments(array &$arguments) { $requestArguments = array(); $mainRequest = $this->request->getMainRequest(); $isSubRequest = $this->request !== $mainRequest; if ($isSubRequest) { $requestArguments = $mainRequest->getArguments(); // remove all arguments of the current sub request if ($this->request->getArgumentNamespace() !== '') { $requestNamespace = $this->getRequestNamespacePath($this->request); if ($this->addQueryString === FALSE) { $requestArguments = Arrays::unsetValueByPath($requestArguments, $requestNamespace); } else { foreach ($this->argumentsToBeExcludedFromQueryString as $argumentToBeExcluded) { $requestArguments = Arrays::unsetValueByPath($requestArguments, $requestNamespace . '.' . $argumentToBeExcluded); } } } // merge special arguments (package, subpackage, controller & action) from main request $mainRequestPackageKey = $mainRequest->getControllerPackageKey(); if (!empty($mainRequestPackageKey)) { $requestArguments['@package'] = $mainRequestPackageKey; } $mainRequestSubpackageKey = $mainRequest->getControllerSubpackageKey(); if (!empty($mainRequestSubpackageKey)) { $requestArguments['@subpackage'] = $mainRequestSubpackageKey; } $mainRequestControllerName = $mainRequest->getControllerName(); if (!empty($mainRequestControllerName)) { $requestArguments['@controller'] = $mainRequestControllerName; } $mainRequestActionName = $mainRequest->getControllerActionName(); if (!empty($mainRequestActionName)) { $requestArguments['@action'] = $mainRequestActionName; } } elseif ($this->addQueryString === TRUE) { $requestArguments = $this->request->getArguments(); foreach ($this->argumentsToBeExcludedFromQueryString as $argumentToBeExcluded) { unset($requestArguments[$argumentToBeExcluded]); } } if (count($requestArguments) === 0) { return; } $arguments = Arrays::arrayMergeRecursiveOverrule($requestArguments, $arguments); }
/** * @test */ public function allArgumentsCanBeSetOrRetrievedAtOnce() { $httpRequest = HttpRequest::create(new Uri('http://robertlemke.com/blog')); $arguments = array('foo' => 'fooValue', 'bar' => 'barValue'); $actionRequest = new ActionRequest($httpRequest); $actionRequest->setArguments($arguments); $this->assertEquals($arguments, $actionRequest->getArguments()); }