| 5 common.inc | drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302) |
| 6 common.inc | drupal_goto($path = '', |
| 7 common.inc | drupal_goto($path = '', array $options = array(), $http_response_code = 302) |
| 8 common.inc | drupal_goto($path = '', array $options = array(), $http_response_code = 302) |
Sends the user to a different Drupal page.
This issues an on-site HTTP redirect. The function makes sure the redirected URL is formatted correctly.
If a destination was specified in the current request's URI (i.e., $_GET['destination']) then it will override the $path and $options values passed to this function. This provides the flexibility to build a link to user/login and override the default redirection so that the user is redirected to a specific path after logging in:
$query = array('destination' => "node/$node->nid");
$link = l(t('Log in'), 'user/login', array('query' => $query));
Drupal will ensure that messages set by drupal_set_message() and other session data are written to the database before the user is redirected.
This function ends the request; use it instead of a return in your menu callback.
Parameters
$path: A Drupal path or a full URL.
$options: An associative array of additional URL options to pass to url().
$http_response_code: The valid values for 3xx redirection status codes are defined in RFC 2616 and the draft for the new HTTP status codes:
- 301: Moved Permanently (the recommended value for most redirects).
- 302: Found (default in Drupal and PHP, sometimes used for spamming search engines).
- 303: See Other.
- 304: Not Modified.
- 305: Use Proxy.
- 307: Temporary Redirect.
See also
url()
Related topics
41 calls to drupal_goto()
5 string references to 'drupal_goto'
File
- core/
includes/ common.inc, line 662 - Common functions that many Drupal modules will need to reference.
Code
function drupal_goto($path = '', array $options = array(), $http_response_code = 302) {
// A destination in $_GET always overrides the function arguments.
// We do not allow absolute URLs to be passed via $_GET, as this can be an attack vector.
if (isset($_GET['destination']) && !url_is_external($_GET['destination'])) {
$destination = drupal_parse_url($_GET['destination']);
$path = $destination['path'];
$options['query'] = $destination['query'];
$options['fragment'] = $destination['fragment'];
}
drupal_alter('drupal_goto', $path, $options, $http_response_code);
// The 'Location' HTTP header must be absolute.
$options['absolute'] = TRUE;
$url = url($path, $options);
header('Location: ' . $url, TRUE, $http_response_code);
// The "Location" header sends a redirect status code to the HTTP daemon. In
// some cases this can be wrong, so we make sure none of the code below the
// drupal_goto() call gets executed upon redirection.
drupal_exit($url);
}
Login or register to post comments