「user-login」という新しいパスを作成するためにhook_menu()
を実装しました。ページコールバック関数は_$_GET['parameter']
_;のようなURLパラメータを受け取ります。ただし、 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
drupalメニューシステムは$ _GET引数を気にしません。あなたはそれらを使って何でもできます。それはhook_menu()実装には影響しません**。
したがって、エラーは別の場所にあります。 hook_menu()の結果は保存され、すべてのページで呼び出されるわけではありません。その機能で何かを変更/追加した場合、メニューを再構築する必要があります。これを行う最も速い方法は、dvel.moduleの開発リンクブロックでdrushコマンド「drush cc all」または「rebuild menus」を使用することです。ただし、モジュールページを送信することもできます。
**とはいえ、追加のパス引数としてメニューシステムに引数throughを渡す方がはるかに一般的です。パスの後に渡されたものはすべて、引数としてページコールバックに自動的に渡されます。したがって、user-login/2/3/sd7wdahを呼び出すと、これら3つの引数がuser_login_callback(2、3、 'sd7wdah')として関数に渡されます。また、hook_menu():_user-login/%/%/%
_で次のようなパスを指定し、'path arguments' => array(1, 2, 3),
でパス引数を定義することにより、これらの引数を必須にすることもできます。これにより、関数はこれらの3つの引数でのみ呼び出すことができ、それらはオプションではなくなります。
わかりやすくするために
http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah
動作しません、それはする必要があります:
http://site.com/user-login?uid=2&expiry=3&hash=sd7wdah
「?」が1つしかないことに注意してください。追加の各パラメータは「&」で区切られます