양식이 처리되면의 값이 (으 $form_state['redirect']
)로 전송 drupal_goto()
되며 drupal_goto()
항상 $_GET['destination']
자체 $path
매개 변수 보다 우선합니다 .
완벽을 기하기 위해 Drupal 6에서는 다음과 hook_exit()
같이 헤더를 설정하지 않은 채 다소 운이 없었습니다 .
function mymodule_exit($destination = NULL) {
$my_destination = 'foo/bar';
header('Location: ' . url($my_destination));
exit;
}
Drupal 7에서는 hook_drupal_goto_alter()
이 특정 사용 사례에 추가되었습니다.
function mymodule_drupal_goto_alter(&$path, &$options, &$http_response_code) {
$path = 'foo/bar';
}
Drupal 7의 또 다른 옵션은 수행하려는 작업에 더 가까운 다음을 drupal_get_destination()
사용하여 제출 핸들러에서 정적 캐시를 재설정하는 것입니다 drupal_static_reset()
.
function mymodule_form_submit($form, &$form_state) {
// See note
$form_state['redirect'][] = drupal_get_destination();
$form_state['redirect'][] = 'foo/bar';
unset($_GET['destination']);
drupal_static_reset('drupal_get_destination');
drupal_get_destination();
}
drupal_get_destination()
재설정 후 즉시 호출하기 때문에 Drupal은 호출 할 때를 포함하여 나머지 페이지 빌드에 대한 대상 매개 변수를 행복하게 인식하지 못합니다 drupal_goto()
.
참고 :$form_state['redirect']
변수를 덮어 쓰지 않기 때문에 정의를위한 코드를 변경했습니다 . 다른 제출 핸들러는 자체 리디렉션을 정의했을 수 있습니다. Drupal은 항상 배열 의 마지막 항목을 사용 하므로 foo/bar
대상 매개 변수 (및 해당 지점까지 정의 된 다른 모든 리디렉션)를 재정의 하려면 마지막 항목 이어야합니다.