it-swarm-es.com

¿Por qué la devolución de llamada de la página tiene dos argumentos?

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));
}

En la función menufun_menu(), el argumento de página para la devolución de llamada menufun_hello Es solo uno. ¿Por qué menufun_hello() tiene dos parámetros?

5
enjoylife

Las devoluciones de llamada de menú se pasan primero los argumentos definidos en page arguments luego argumentos en exceso de la url.

Entonces, en el ejemplo anterior:

menufun/1/bar/baz

Proporcionará estos vars:

$a = 1;
$b = NULL;

Sin embargo, si proporciona un argumento adicional en la URL:

menufun/1/bar/baz/2

Lo transferirá al menú de devolución de llamada:

$a = 1;
$b = 2;

La otra ventaja es como las escrituras de Tim, que permite la reutilización del mismo código para varios casos, haciendo que el módulo sea más fácil de mantener.

7
googletorp

En este caso, menufun_hello() toma hasta dos argumentos, pero tan poco como cero, ya que proporciona valores predeterminados. Esto significa que menufun_menu() luego podría pasar otro argumento, y la firma de la función no tendría que cambiar.

1
tim.plunkett