Truyền tham số URL vào lệnh gọi lại menu


7

Tôi đã triển khai hook_menu()để tạo một đường dẫn mới gọi là 'đăng nhập người dùng'. Hàm gọi lại trang nhận các tham số url như $_GET['parameter']; tuy nhiên, khi tôi truy cập http://site.com/user-login?parameter=test , tôi gặp lỗi 404. Làm thế nào tôi nên thực hiện hook_menu()để làm việc này?

Đây là mã tôi đang sử dụng

/**
 * Implementation of hook_menu()
 */
function login_menu() {
  //$items = array();

  $items['user-login'] = array(
    'title' => 'External login',
    'page callback' => 'user_login_callback',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function user_login_callback() {

  // Get the URL params
  $uid = urldecode($_GET['uid']);
  $expiry = urldecode($_GET['expiry']);
  $provided_hash = urldecode($_GET['hash']);  

}

Trang sẽ được gọi như http://site.com/user-login?uid=2?Exiry=3?hash=sd7wdah


Bạn có thể cung cấp mã được sử dụng trong việc thực hiện hook_menu()?
kiamlaluno

Tôi đã thêm mã
Matthew Hui

Câu trả lời:


4

Hệ thống menu drupal không quan tâm đến các đối số $ _GET, bạn có thể làm bất cứ điều gì bạn muốn với chúng, nó không ảnh hưởng đến việc triển khai hook_menu () **.

Vì vậy, lỗi nằm ở một nơi khác. Kết quả của hook_menu () được lưu trữ, nó không được gọi trên mỗi trang. Nếu bạn thay đổi / thêm bất cứ thứ gì trong chức năng đó, bạn cần xây dựng lại các menu. Cách nhanh nhất để làm điều đó là sử dụng lệnh drush "drush cc all" hoặc "xây dựng lại các menu" trong khối liên kết Phát triển của devel.module. Bạn cũng có thể gửi trang mô-đun, mặc dù.

** Điều đó nói rằng, việc truyền các đối số qua hệ thống menu dưới dạng đối số đường dẫn bổ sung là phổ biến hơn nhiều . Bất cứ điều gì được thông qua sau đường dẫn sẽ được chuyển thành đối số cho cuộc gọi lại trang của bạn một cách tự động. Vì vậy, việc gọi người dùng đăng nhập / 2/3 / sd7wdah sẽ chuyển ba đối số này cho hàm của bạn là user_login_callback (2, 3, 'sd7wdah'). Bạn cũng có thể tạo các đối số này theo yêu cầu bằng cách chỉ định đường dẫn như thế này trong hook_menu (): user-login/%/%/%và xác định các đối số đường dẫn như thế này : 'path arguments' => array(1, 2, 3),. Điều này sẽ đảm bảo rằng hàm của bạn chỉ có thể được gọi với ba đối số này và chúng không phải là tùy chọn.


Tôi đã triển khai chính xác như bạn đã nói nhưng đã cảnh báo: Thiếu đối số 1 cho user_login_callback () Thiếu đối số 2 cho user_login_callback () Thiếu đối số 3 cho user_login_callback ()
Matthew Hui

Vì vậy, thay vì đăng nhập người dùng /% /% /%, tôi giữ nó dưới dạng 'đăng nhập người dùng' và thêm 'đối số đường dẫn' => mảng (1, 2, 3) và nó đã hoạt động. Cảm ơn
Matthew Hui

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.