it-swarm.asia

تمرير معلمات URL لاستدعاءات القائمة

قمت بتطبيق hook_menu() لإنشاء مسار جديد يسمى "تسجيل دخول المستخدم". تتلقى وظيفة استدعاء الصفحة معلمات عنوان url مثل $_GET['parameter']؛ ومع ذلك ، عندما أذهب إلى http://site.com/user-login؟parameter=test ، أتلقى خطأ 404. كيف يمكنني تنفيذ hook_menu() للحصول على هذا العمل؟

هذا هو الرمز الذي أستخدمه

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

}

سيتم استدعاء الصفحة مثل http://site.com/user-login؟uid=2؟expiry=3؟hash=sd7wdah

7
Matthew Hui

لا يهتم نظام القائمة drupal بالحجج $ _GET ، يمكنك فعل ما تريد معهم ، ولا يؤثر على تنفيذ hook_menu () **.

لذا ، الخطأ يكمن في مكان آخر. يتم تخزين نتيجة hook_menu () ، ولا يتم استدعاؤها في كل صفحة. إذا قمت بتغيير/إضافة أي شيء في هذه الوظيفة ، فأنت بحاجة إلى إعادة بناء القوائم. إن أسرع طريقة للقيام بذلك هي استخدام الأمر drush "drush cc all" أو "rebuild menus" في كتلة devel.module's links links. يمكنك أيضًا إرسال صفحة الوحدات ، على الرغم من ذلك.

** ومع ذلك ، فمن الشائع جدًا تمرير الوسيطات من خلال نظام القائمة كوسيطات مسار إضافية. أي شيء يتم تمريره بعد المسار سيتم تمريره كوسيطة لاستدعاء صفحتك تلقائيًا. لذا فإن استدعاء user-login/2/3/sd7wdah سيمرر هذه الوسيطات الثلاثة إلى وظيفتك كـ user_login_callback (2، 3، 'sd7wdah'). يمكنك أيضًا جعل هذه الوسيطات مطلوبة عن طريق تحديد المسار مثل هذا في hook_menu (): user-login/%/%/% وتحديد وسيطات المسار مثل هذا: 'path arguments' => array(1, 2, 3),. سيضمن ذلك أنه لا يمكن استدعاء وظيفتك إلا من خلال هذه الوسيطات الثلاثة وأنها ليست اختيارية.

4
Berdir

فقط من أجل الوضوح ،

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

لن يعمل ، يجب أن يكون:

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

لاحظ كيف يوجد واحد فقط؟ ويتم فصل كل معلمة إضافية بعلامة "&"

1
DeeZone