Created
July 25, 2011 13:35
-
-
Save heptat/1104132 to your computer and use it in GitHub Desktop.
redirect fn
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Creates a redirect response by calling `render()` and providing a `'location'` parameter. | |
* | |
* @see lithium\net\http\Router::match() | |
* @see lithium\action\Controller::$response | |
* @param mixed $url The location to redirect to, provided as a string relative to the root of | |
* the application, a fully-qualified URL, or an array of routing parameters to be | |
* resolved to a URL. Post-processed by `Router::match()`. | |
* @param array $options Options when performing the redirect. Available options include: | |
* - `'status'` _integer_: The HTTP status code associated with the redirect. | |
* Defaults to `302`. | |
* - `'head'` _boolean_: Determines whether only headers are returned with the | |
* response. Defaults to `true`, in which case only headers and no body are | |
* returned. Set to `false` to render a body as well. | |
* - `'exit'` _boolean_: Exit immediately after rendering. Defaults to `false`. | |
* Because `redirect()` does not exit by default, you should always prefix calls | |
* with a `return` statement, so that the action is always immediately exited. | |
* @return object Returns the instance of the `Response` object associated with this controller. | |
* @filter This method can be filtered. | |
*/ | |
public function redirect($url, array $options = array()) { | |
$router = $this->_classes['router']; | |
$defaults = array('location' => null, 'status' => 302, 'head' => true, 'exit' => false); | |
$options += $defaults; | |
$params = compact('url', 'options'); | |
$this->_filter(__METHOD__, $params, function($self, $params) use ($router) { | |
$options = $params['options']; | |
$location = $options['location'] ?: $router::match($params['url'], $self->request); | |
$self->render(compact('location') + $options); | |
}); | |
if ($options['exit']) { | |
$this->response->render(); | |
$this->_stop(); | |
} | |
return $this->response; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment