Почему обратный вызов страницы имеет два аргумента?
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()
имеет два параметра?
2 answers
Обратные вызовы меню передаются сначала аргументами, определенными в page arguments
, затем избыточными аргументами из URL-адреса.
Итак, в приведенном выше примере:
menufun/1/bar/baz
Предоставит следующие переменные:
$a = 1;
$b = NULL;
Если вы, однако, предоставите дополнительный аргумент в URL-адресе:
menufun/1/bar/baz/2
Вы перенесете его в меню обратного вызова:
$a = 1;
$b = 2;
Другое преимущество, как пишет Тим, заключается в том, что оно позволяет повторно использовать один и тот же код в различных случаях, делая модуль более удобным для обслуживания.
В этом случае menufun_hello()
принимает до двух аргументов, но всего лишь ноль, поскольку он предоставляет значения по умолчанию. Это означает, что menufun_menu()
позже может передать другой аргумент, и сигнатуру функции не придется менять.