Câu trả lời này đã dẫn đến một cuộc thảo luận về cách tốt nhất để chuyển hướng người dùng đến một trang cụ thể nếu họ không nên truy cập vào trang mà họ đang cố truy cập.
Một tùy chọn là đặt cuộc gọi lại truy cập thành đúng và sau đó chuyển hướng người dùng trong cuộc gọi lại trang. Mặc dù điều này có vẻ hợp lệ nhưng tôi nghĩ rằng nó đang trộn chức năng truy cập với chức năng xây dựng trang trong cuộc gọi lại trang.
Ví dụ
function hook_menu() {
$items['player/my_page'] = array(
'title' => t('My Page'), // note this is a required parameter
'access callback' => TRUE,
'page callback' => 'some_function',
);
return $items;
}
function some_function() {
global $user;
if(!$user->uid) { // here checking if the user is logged in but could be checking for a specific permission or field value
$dest = drupal_get_destination();
drupal_goto('user/login', $dest); // this remembers where the user is coming from
}
// carry on building rest of page
}
Một tùy chọn khác là đặt chức năng gọi lại truy cập để gọi một chức năng kiểm tra xem người dùng có quyền truy cập hay không, nhưng sau đó thay vì trả về sai, nó sẽ chuyển hướng người dùng sang trang khác. Điều này là tốt vì nó tách biệt logic truy cập và logic xây dựng trang. Tuy nhiên, mục đích của một cuộc gọi lại truy cập là trả về giá trị boolean, vì vậy điều này phá vỡ logic đó bằng cách chuyển hướng người dùng.
Ví dụ
function hook_menu() {
$items['player/my_page'] = array(
'title' => t('My Page'), // note this is a required parameter
'access callback' => 'check_access',
'page callback' => 'some_function',
);
return $items;
}
function check_access() {
global $user;
// here checking if the user is logged in but could be checking for a specific permission or field value
if(!$user->uid) {
$dest = drupal_get_destination();
drupal_goto('user/login', $dest);
}
return TRUE;
}
Có bất kỳ tác dụng không mong muốn nào từ việc chuyển hướng người dùng trong cuộc gọi lại truy cập mà tôi không biết?
Bạn nghĩ gì là thực hành tốt nhất ở đây?