function drupal_goto

You are here

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

Sends the user to a different page.

This issues an on-site HTTP redirect. The function makes sure the redirected URL is formatted correctly.

Usually the redirected URL is constructed from this function's input parameters. However you may override that behavior by setting a destination in either the $_REQUEST-array (i.e. by using the query string of an URI) This is used to direct the user back to the proper page after completing a form. For example, after editing a post on the 'admin/content'-page or after having logged on using the 'user login'-block in a sidebar. The function drupal_get_destination() can be used to help set the destination URL.

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: (optional) A Drupal path or a full URL, which will be passed to url() to compute the redirect for the URL.

$options: (optional) An associative array of additional URL options to pass to url().

$http_response_code: (optional) The HTTP status code to use for the redirection, defaults to 302. 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

44 calls to drupal_goto()
aggregator_admin_refresh_feed in modules/aggregator/aggregator.admin.inc
Page callback: Refreshes a feed, then redirects to the overview page.
comment_approve in modules/comment/comment.pages.inc
Menu callback; publish specified comment.
comment_multiple_delete_confirm in modules/comment/comment.admin.inc
List the selected comments and verify that the admin wants to delete them.
comment_reply in modules/comment/comment.pages.inc
This function is responsible for generating a comment reply form. There are several cases that have to be handled, including:
common_test_drupal_goto_redirect in modules/simpletest/tests/common_test.module
Redirect using drupal_goto().

... See full list

5 string references to 'drupal_goto'
batch_process in includes/form.inc
Processes the batch.
common_test_menu in modules/simpletest/tests/common_test.module
Implements hook_menu().
DrupalGotoTest::testDrupalGoto in modules/simpletest/tests/common.test
Test drupal_goto().
drupal_redirect_form in includes/form.inc
Redirects the user to a URL after a form has been processed.
update_batch in includes/update.inc
Starts the database update batch process.

File

includes/common.inc, line 686
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);
}

Comments

Following is the eexample to send query string using drupal_goto

drupal_goto('your_url', array('query'=>array(
'variable_name1'=>'variable_value1',
'variable_name2'=>'variable_value2',
'variable_name3'=>'variable_value3',
...... ...
)));

For some reason the syntax for the common case of using this with drupal_get_destination on D7 was tripping me up. The common case of redirecting a user to the the login form before redirecting back to the content originally attempted to be accessed is illustrated as follows.

drupal_goto('user', array('query'=>drupal_get_destination()) );

for example

drupal_goto("products", array('fragment' => $node->nid));

this will result prducts#nid

This has been removed in D8. See change record: https://drupal.org/node/2023537

Hi,

I have a problem in custom page redirects, while using drupal_goto() in my hook_init() function.

Is there a way to solve it?

For reference if someone need:

<?php
drupal_goto
('user', array('query' => array('destination' => 'somehere')));
?>