web-dev-qa-db-ja.com

ページコールバックに2つの引数があるのはなぜですか?

_function menufun_menu() {
  $items['menufun/%/bar/baz'] = array(
    'title' => 'Hi',
    'page callback' => 'menufun_hello',
    'page arguments' => array(1), // The matched wildcard.
    'access callback' => TRUE,
  );

  return $items;
}

/**
* Page callback.
*/
function menufun_hello($a = NULL, $b = NULL) {
  return t('Hello. $a is @a and $b is @b', array('@a' => $a, '@b' => $b));
}
_

menufun_menu()関数では、_menufun_hello_コールバックのページ引数は1つだけです。 menufun_hello()に2つのパラメーターがあるのはなぜですか?

5
enjoylife

メニューコールバックには、最初にpage argumentsで定義された引数が渡され、次にURLから余分な引数が渡されます。

したがって、上記の例では:

menufun/1/bar/baz

これらの変数を提供します:

$a = 1;
$b = NULL;

ただし、URLに追加の引数を指定した場合:

menufun/1/bar/baz/2

これをメニューコールバックに転送します。

$a = 1;
$b = 2;

もう1つの利点はtimによる書き込みと同様で、さまざまなケースで同じコードを再利用できるため、モジュールの保守が容易になります。

7
googletorp

この場合、menufun_hello()は最大2つの引数を取りますが、デフォルトを提供するので、ゼロにすぎません。つまり、menufun_menu()は後で別の引数を渡すことができ、関数のシグネチャを変更する必要はありません。

1
tim.plunkett