Übergabe von URL-Parametern an Menü-Rückrufe

7

Ich habe implementiert hook_menu(), um einen neuen Pfad namens "Benutzeranmeldung" zu erstellen. Die Seitenrückruffunktion empfängt URL-Parameter wie $_GET['parameter']; Wenn ich jedoch zu http://site.com/user-login?parameter=test gehe, wird ein 404-Fehler angezeigt. Wie soll ich implementieren hook_menu(), damit dies funktioniert?

Dies ist der Code, den ich verwende

/**
 * 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']);  

}

Die Seite würde wie http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah heißen

Matthew Hui
quelle
Können Sie den Code angeben, der bei der Implementierung von verwendet wird hook_menu()?
Kiamlaluno
Ich habe den Code hinzugefügt
Matthew Hui

Antworten:

4

Das Drupal-Menüsystem kümmert sich nicht um $ _GET-Argumente, Sie können mit ihnen machen, was Sie wollen, es hat keinen Einfluss auf die Implementierung von hook_menu () **.

Der Fehler liegt also woanders. Das Ergebnis von hook_menu () wird gespeichert und nicht auf jeder Seite aufgerufen. Wenn Sie in dieser Funktion etwas ändern / hinzufügen, müssen Sie die Menüs neu erstellen. Der schnellste Weg, dies zu tun, ist die Verwendung des Befehls "drush cc all" oder "Menüs neu erstellen" im Entwicklungslinkblock von devel.module. Sie können die Modulseite jedoch auch einreichen.

** Es ist jedoch weitaus üblicher, Argumente als zusätzliche Pfadargumente über das Menüsystem zu übergeben. Alles, was nach dem Pfad übergeben wird, wird automatisch als Argument an Ihren Seitenrückruf übergeben. Wenn Sie also user-login / 2/3 / sd7wdah aufrufen, werden diese drei Argumente an Ihre Funktion als user_login_callback (2, 3, 'sd7wdah') übergeben. Sie können diese Argumente auch erforderlich machen, indem Sie den Pfad wie folgt in hook_menu (): angeben user-login/%/%/%und die Pfadargumente wie folgt definieren : 'path arguments' => array(1, 2, 3),. Dadurch wird sichergestellt, dass Ihre Funktion nur mit diesen drei Argumenten aufgerufen werden kann und dass sie nicht optional sind.

Berdir
quelle
Ich habe es genau so implementiert, wie Sie es gesagt haben, habe aber eine Warnung erhalten: Fehlendes Argument 1 für user_login_callback () Fehlendes Argument 2 für user_login_callback () Fehlendes Argument 3 für user_login_callback ()
Matthew Hui
Anstelle von Benutzeranmeldung /% /% /% habe ich es als 'Benutzeranmeldung' beibehalten und 'Pfadargumente' => Array (1, 2, 3) hinzugefügt, und es hat funktioniert. Vielen Dank
Matthew Hui