it-swarm-id.com

Melewati parameter URL ke panggilan balik menu

Saya menerapkan hook_menu() untuk membuat jalur baru yang disebut 'user-login'. Fungsi panggilan balik halaman menerima parameter url seperti $_GET['parameter']; namun, ketika saya pergi ke http://site.com/user-login?parameter=test , saya mendapatkan kesalahan 404. Bagaimana saya harus menerapkan hook_menu() agar ini berfungsi?

Ini adalah kode yang saya gunakan

/**
 * 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']);  

}

Halaman akan dipanggil seperti http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah

7
Matthew Hui

Sistem menu drupal tidak peduli dengan argumen $ _GET, Anda dapat melakukan apa pun yang Anda inginkan dengannya, itu tidak memengaruhi implementasi hook_menu () **.

Jadi, kesalahannya terletak di tempat lain. Hasil hook_menu () disimpan, tidak dipanggil pada setiap halaman. Jika Anda mengubah/menambahkan sesuatu di fungsi itu, Anda perlu membangun kembali menu. Cara tercepat untuk melakukannya adalah dengan menggunakan perintah drush "drush cc all" atau "membangun kembali menu" di blok tautan pengembangan devel.module. Anda juga dapat mengirimkan halaman modul.

** Yang mengatakan, itu jauh lebih umum untuk melewati argumen melalui sistem menu sebagai argumen jalur tambahan. Apa pun yang dilewati setelah jalur akan diteruskan sebagai argumen untuk panggilan balik halaman Anda secara otomatis. Jadi memanggil user-login/2/3/sd7wdah akan meneruskan tiga argumen ini ke fungsi Anda sebagai user_login_callback (2, 3, 'sd7wdah'). Anda juga dapat membuat argumen ini dengan menetapkan path seperti ini di hook_menu (): user-login/%/%/% Dan mendefinisikan argumen path seperti ini: 'path arguments' => array(1, 2, 3),. Ini akan memastikan bahwa fungsi Anda hanya dapat dipanggil dengan tiga argumen ini dan tidak opsional.

4
Berdir

Hanya untuk kejelasan,

http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah

tidak akan berfungsi, seharusnya:

http://site.com/user-login?uid=2&expiry=3&hash=sd7wdah

Perhatikan bagaimana hanya ada satu "?" dan setiap parameter tambahan dipisahkan dengan "&"

1
DeeZone