web-dev-qa-db-ja.com

hook_menu()ワイルドカードの問題

ワイルドカードをhook_menuから取得してコールバック関数に渡すことができません

これが私が持っているものです:

function spin_menu() {
    $items = array();

    $items['spin/login/%'] = array(
        'title' => 'SPIN',
        'type' => MENU_CALLBACK,
        'access callback' => TRUE,
        'page callback' => 'spin_check_access'
    );

    return $items;
}

function spin_check_access($type = '') {
    echo $type; // type is never the %
}

それが正しいか? $ typeをワイルドカードの値に置き換える必要があります。

3
chchrist

次の2つのオプションがあります。

function spin_menu() {
  $items = array();

  $items['spin/login'] = array(
    'title' => 'SPIN',
    'type' => MENU_CALLBACK,
    'access callback' => TRUE,
    'page callback' => 'spin_check_access',
  );

  $items['spin/login/%'] = array(
    'title' => 'SPIN',
    'type' => MENU_CALLBACK,
    'access callback' => TRUE,
    'page callback' => 'spin_check_access',
    'page arguments' => array(2),
  );

  return $items;
}

フックメニューはコールバック関数にワイルドカードパラメータを送信しませんが、URLで定義されていないパラメータを送信します。したがって、最初の例では、spin/loginタイプに移動すると、''となり、spin/login/fooタイプはfooになります。 2番目の例では、spin/loginは404を返し、spin/login/fooのタイプはfooになります。

2
googletorp

Drupalにどの値を渡すかを伝えているため、ページ引数が不足しています。試してください:

$items['spin/login/%'] = array(
    'title' => 'SPIN',
    'type' => MENU_CALLBACK,
    'access callback' => TRUE,
    'page arguments' => array(2),
    'page callback' => 'spin_check_access'
);
1
Letharion