it-swarm.it

Passando i parametri URL ai callback dei menu

Ho implementato hook_menu() per creare un nuovo percorso chiamato 'user-login'. La funzione di callback della pagina riceve parametri url come $_GET['parameter']; tuttavia, quando vado a http://site.com/user-login?parameter=test , ottengo un errore 404. Come devo implementare hook_menu() per farlo funzionare?

Questo è il codice che sto usando

/**
 * Implementation of hook_menu()
 */
function login_menu() {
  //$items = array();

  $items['user-login'] = array(
    'title' => 'External login',
    'page callback' => 'user_login_callback',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;
}

function user_login_callback() {

  // Get the URL params
  $uid = urldecode($_GET['uid']);
  $expiry = urldecode($_GET['expiry']);
  $provided_hash = urldecode($_GET['hash']);  

}

La pagina si chiamerebbe come http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah

7
Matthew Hui

Il sistema di menu drupal non si preoccupa degli argomenti $ _GET, puoi fare quello che vuoi con loro, non influisce sull'implementazione hook_menu () **.

Quindi, l'errore si trova altrove. Il risultato di hook_menu () è memorizzato, non viene chiamato su ogni pagina. Se si modifica/aggiunge qualcosa in quella funzione, è necessario ricostruire i menu. Il modo più veloce per farlo è usare il comando drush "drush cc all" o "ricostruisci menu" nel blocco dei collegamenti di sviluppo di devel.module. Tuttavia, puoi anche inviare la pagina dei moduli.

** Detto questo, è molto più comune passare argomenti attraverso il sistema di menu come argomenti di percorso aggiuntivi. Qualsiasi cosa passata dopo il percorso verrà passata automaticamente come argomento al callback della pagina. Quindi, chiamando user-login/2/3/sd7wdah passerai questi tre argomenti alla tua funzione come user_login_callback (2, 3, 'sd7wdah'). È inoltre possibile rendere necessari questi argomenti specificando il percorso in questo modo in hook_menu (): user-login/%/%/% E definendo gli argomenti del percorso in questo modo: 'path arguments' => array(1, 2, 3),. Questo farà in modo che la tua funzione possa essere chiamata solo con questi tre argomenti e che non siano opzionali.

4
Berdir

Solo per chiarezza,

http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah

non funzionerà, dovrebbe essere:

http://site.com/user-login?uid=2&expiry=3&hash=sd7wdah

Nota come ce n'è solo uno "?" e ogni parametro aggiuntivo è separato con "&"

1
DeeZone