drupal_goto

5 common.inc drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302)
6 common.inc drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302)
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

drupal_get_destination()

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