找不到hook_menu定义的drupal 7页面

时间:2014-09-03 19:12:54

标签: javascript drupal-7 drupal-modules

我已经尝试过在互联网上找到的所有内容都无济于事。

该模块提供由iframe处理的外部身份验证。身份验证完成后,会向drupal页面上的套接字发送一条消息,其成功或失败状态。 如果成功,模块需要再次与外部服务器通信以获取drupal上的用户ID以完成登录。

两件事: (1)drupal必须不知道外部凭据,并且 (2)外部验证器上的用户名/密码独立于drupal用户名/密码。

模块的名称是' yauisauth'。

鉴于此,我在hook_menu中有以下内容:

function yauisauth_menu() {
  $items['yauisauth/callback/%'] = array(
  'title' => 'yauis login completion',
  'description' => 'coordinates yauis login with drupal login',
  'access callback' => user_is_anonymous,
  'file' => 'yauisauth.inc',
  'page callback' => 'yauisauth_callback',
  'page arguments' => array(2),
  'type' => MENU_CALLBACK,
);
$items['yauisauth/failed'] = array(
  'title' => 'login failed',
  'description' => 'login failed',
  'access callback' => user_is_anonymous,
  'file' => 'yauisauth.inc',
  'page callback' => 'yauis_login_failed',
  'type' => MENU_CALLBACK,
);
return $items;

}

从javascript:

调用回调
return_to = 'yauisauth/callback/';   
return_to += transid;
jQuery.post(return_to, null, null);

我得到的错误是:

POST http://localhost/drupal7/yauisauth/callback/4ddcd4ab-5167-4aa5-bafa-ee46812237d8 404 (Not Found) 

很明显,我不是以drupal希望看到的方式构建网址,但我不知道该怎么做。

最初,我拥有yauisauth.module中的所有函数,但后来将回调函数和它调用的函数拆分为yauisauth.inc

在每次更改之间,我执行以下操作:

(在mysql中):

更新系统SET状态=' 0'姓名=' yauisauth&#39 ;;   DELETE FROM cache_bootstrap WHERE cid =' system_list';

然后在bash中:

drush -cc menu
drush -cc all

(盲目地按照我在网上找到的每条指令。)

回调函数如下所示:

function yauisauth_callback($transid) {
  $attr = get_attributes($transid);
  if (empty($attr)) { 
      return drupal_not_found();
  } 
  ... // calls to other functions local to the yauisauth.inc file
}

任何人都可以告诉我为什么我的回调函数调用失败了,我能做些什么让它起作用?

根据其他地方收到的建议,我将drupal改为驻留在虚拟主机的文档根目录,并将整个url放入javascript调用中 - window.location.origin +' / yauisauth / callback' 。警报通知我网址构造正确。

我有一个" die"在回调函数的开头,永远不会被执行。

如果我把网址放在地址栏中," die"执行语句以便找到路径。

仍在寻找建议。

1 个答案:

答案 0 :(得分:2)

我刚刚看了你的代码 - 你在没有需要的时候添加了下划线,例如page_callback应该是page callback。请参阅:https://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_menu/7