Почему обратный вызов страницы имеет два аргумента?


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 только один. Почему menufun_hello() имеет два параметра?

 5
Author: kiamlaluno, 2011-03-30

2 answers

Обратные вызовы меню передаются сначала аргументами, определенными в page arguments, затем избыточными аргументами из URL-адреса.

Итак, в приведенном выше примере:

menufun/1/bar/baz

Предоставит следующие переменные:

$a = 1;
$b = NULL;

Если вы, однако, предоставите дополнительный аргумент в URL-адресе:

menufun/1/bar/baz/2

Вы перенесете его в меню обратного вызова:

$a = 1;
$b = 2;

Другое преимущество, как пишет Тим, заключается в том, что оно позволяет повторно использовать один и тот же код в различных случаях, делая модуль более удобным для обслуживания.

 7
Author: googletorp, 2011-03-30 15:17:56

В этом случае menufun_hello() принимает до двух аргументов, но всего лишь ноль, поскольку он предоставляет значения по умолчанию. Это означает, что menufun_menu() позже может передать другой аргумент, и сигнатуру функции не придется менять.

 1
Author: tim.plunkett, 2011-03-30 14:30:33