/** * Redirects the web request to another uri. * * NOTE: This method only supports web requests and will throw an exception * if used with other request types. * * @param mixed $uri Either a string representation of a URI or a \TYPO3\FLOW3\Http\Uri object * @param integer $delay (optional) The delay in seconds. Default is no delay. * @param integer $statusCode (optional) The HTTP status code for the redirect. Default is "303 See Other" * @return void * @throws \TYPO3\FLOW3\Mvc\Exception\StopActionException * @api */ protected function redirectToUri($uri, $delay = 0, $statusCode = 303) { // the parent method throws the exception, but we need to act afterwards // thus the code in catch - it's the expected state try { parent::redirectToUri($uri, $delay, $statusCode); } catch (\TYPO3\FLOW3\Mvc\Exception\StopActionException $exception) { if ($this->request->getFormat() === 'json') { $this->response->setContent(''); } throw $exception; } }
/** * Redirects the request to another action and / or controller. * * Redirect will be sent to the client which then performs another request to the new URI. * * NOTE: This method only supports web requests and will throw an exception * if used with other request types. * * @param string $actionName Name of the action to forward to * @param string $controllerName Unqualified object name of the controller to forward to. If not specified, the current controller is used. * @param string $packageKey Key of the package containing the controller to forward to. If not specified, the current package is assumed. * @param array $arguments Array of arguments for the target action * @param integer $delay (optional) The delay in seconds. Default is no delay. * @param integer $statusCode (optional) The HTTP status code for the redirect. Default is "303 See Other" * @param string $format The format to use for the redirect URI * @return void * @throws \TYPO3\FLOW3\Mvc\Exception\StopActionException * @see forward() * @api */ protected function redirect($actionName, $controllerName = NULL, $packageKey = NULL, array $arguments = NULL, $delay = 0, $statusCode = 303, $format = NULL) { if ($packageKey !== NULL && strpos($packageKey, '\\') !== FALSE) { list($packageKey, $subpackageKey) = explode('\\', $packageKey, 2); } else { $subpackageKey = NULL; } $this->uriBuilder->reset(); if ($format === NULL) { $this->uriBuilder->setFormat($this->request->getFormat()); } else { $this->uriBuilder->setFormat($format); } $uri = $this->uriBuilder->setCreateAbsoluteUri(TRUE)->uriFor($actionName, $arguments, $controllerName, $packageKey, $subpackageKey); $this->redirectToUri($uri, $delay, $statusCode); }
/** * @test */ public function theRepresentationFormatCanBeSetAndRetrieved() { $httpRequest = HttpRequest::create(new Uri('http://foo.com')); $actionRequest = new ActionRequest($httpRequest); $actionRequest->setFormat('html'); $this->assertEquals('html', $actionRequest->getFormat()); $actionRequest->setFormat('doc'); $this->assertEquals('doc', $actionRequest->getFormat()); $actionRequest->setFormat('hTmL'); $this->assertEquals('html', $actionRequest->getFormat()); }