メニューコールバックにURLパラメータを渡す


7

hook_menu()「user-login」という新しいパスを作成するために実装しました。ページコールバック関数は、次のような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のように呼び出されます


の実装で使用されるコードを提供してもらえますhook_menu()か?
kiamlaluno

私はコードを追加しました
Matthew Hui

回答:


4

drupalメニューシステムは$ _GET引数を気にしません。それらを使用して何でも好きなことができます。それはhook_menu()実装には影響しません**。

したがって、エラーは別の場所にあります。hook_menu()の結果は保存され、すべてのページで呼び出されるわけではありません。その機能で何かを変更/追加した場合、メニューを再構築する必要があります。これを行う最も速い方法は、dvel.moduleの開発リンクブロックでdrushコマンド「drush cc all」または「rebuild menus」を使用することです。ただし、モジュールページを送信することもできます。

**とはいえ、追加のパス引数としてメニューシステムを介して引数を渡す方がはるかに一般的です。パスの後に渡されたものはすべて、引数としてページコールバックに自動的に渡されます。したがって、user-login / 2/3 / sd7wdahを呼び出すと、これら3つの引数がuser_login_callback(2、3、 'sd7wdah')として関数に渡されます。また、hook_menu():で次のようなパスを指定し、次のようにuser-login/%/%/%パス引数を定義することで、これらの引数を必須にすることもできます'path arguments' => array(1, 2, 3),。これにより、関数はこれらの3つの引数でのみ呼び出すことができ、それらはオプションではなくなります。


私はあなたが言ったとおりにそれを実装しましたが、警告を得ました:user_login_callback()の引数1がありませんuser_login_callback()の引数2がありません
Matthew Hui

したがって、user-login /%/%/%の代わりに、それを「user-login」として保持し、「パス引数」=> array(1、2、3)を追加し、それが機能しました。ありがとう
Matthew Hui

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.