it-swarm-eu.dev

Předávání parametrů adresy URL zpětným voláním nabídky

Implementoval jsem hook_menu() k vytvoření nové cesty nazvané 'user-login'. Funkce zpětného volání stránky přijímá parametry adresy URL, například $_GET['parameter']; nicméně, když jdu na http://site.com/user-login?parameter=test , dostanu chybu 404. Jak mám implementovat hook_menu(), aby to fungovalo?

Toto je kód, který používám

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

}

Stránka by se volala jako http://site.com/user-login?uid=2?expiry=3?hash=sd7wdah

7
Matthew Hui

Systém menu drupal) se nestará o argumenty $ _GET, můžete s nimi dělat, co chcete, neovlivní implementaci hook_menu () **.

Chyba tedy leží někde jinde. Výsledek hook_menu () je uložen, není vyvolán na každé stránce. Pokud v této funkci změníte nebo přidáte cokoli, budete muset nabídky znovu vytvořit. Nejrychlejším způsobem, jak toho dosáhnout, je použití příkazu drush "drush cc all" nebo "rebuild menu" v bloku Devel.module's Development links. Můžete však také odeslat stránku modulů.

** To znamená, že je mnohem běžnější předávat argumenty prostřednictvím systém menu jako další argumenty cesty. Všechno předané po cestě bude automaticky předáno jako argument zpětného volání vaší stránky. Volání user-login/2/3/sd7wdah tedy předá tyto tři argumenty vaší funkci jako user_login_callback (2, 3, 'sd7wdah'). Tyto argumenty můžete také provést zadáním takové cesty v hook_menu (): user-login/%/%/% A definováním argumentů cesty takto: 'path arguments' => array(1, 2, 3),. Tím zajistíte, že vaše funkce může být vyvolána pouze pomocí těchto tří argumentů a že nejsou volitelné.

4
Berdir

Jen pro přehlednost,

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

nebude fungovat, mělo by to být:

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

Všimněte si, jak existuje pouze jeden "?" a každý další parametr je oddělen "&"

1
DeeZone