Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 找不到由hook_菜单定义的drupal 7页面_Javascript_Drupal 7_Drupal Modules - Fatal编程技术网

Javascript 找不到由hook_菜单定义的drupal 7页面

Javascript 找不到由hook_菜单定义的drupal 7页面,javascript,drupal-7,drupal-modules,Javascript,Drupal 7,Drupal Modules,我在网上找到的所有东西都试过了,但都没有用 该模块提供由iframe处理的外部身份验证。身份验证完成后,将向drupal页面上的套接字发送一条状态为success或failed的消息。 如果成功,模块需要再次与外部服务器通信,以获取drupal上的用户ID,从而完成登录 两件事: (1) drupal必须不知道外部凭证,并且 (2) 外部验证器上的用户名/密码独立于drupal用户名/密码 模块的名称为“yauisauth” 鉴于此,我在hook_菜单中有以下内容: function yauis

我在网上找到的所有东西都试过了,但都没有用

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

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

模块的名称为“yauisauth”

鉴于此,我在hook_菜单中有以下内容:

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希望看到的方式构建url,但我不知道该怎么做

最初,我在yauisauth.module中拥有所有函数,但随后将回调函数及其调用的函数拆分为yauisauth.inc

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

(在mysql中):

更新系统集状态='0',其中name='yauisauth'; 从缓存_引导中删除,其中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'中。一个警报通知我url构造正确

我在回调函数的开头有一个“die”,它永远不会执行

如果我把url放在地址栏中,就会执行“die”语句以便找到路由


仍然在寻求建议。

我刚刚又看了一遍你的代码–你在不需要下划线的时候添加下划线,例如
page\u callback
应该是
page callback
。请参阅:。

为什么要执行这些MySQL命令?您只需清除(菜单)缓存即可查找
hook\u菜单
项。您是否确定您不是在回调中返回
drupal\u not\u found
页面的人?(也就是说,
$attr
不是空的?)mysql命令用于在更改后注销模块。我没有返回drupal\u not\u found页面,我在控制台中收到not found消息。您不需要重新注册模块。只需从Drush(
Drush cc menu
)或通过访问
admin/config/development/performance
清除菜单缓存即可。如果粘贴的代码中
$attr
为空,则返回一个
drupal\u not_found
。你确定这不是被击中的原因吗?我只是在调用get_attributes后立即放置了一个“die”,它没有被执行——我仍然在javascript控制台中收到“notfound”消息。我如何构造文章的url以便找到它?谢谢,Charlie-我已经修复了这个问题,但仍然无法正确获取我的新页面。如果您可以发布修改后的代码,并验证在浏览器中手动点击url无法修复此问题,我可以尝试提供帮助。我在上面做了建议的更改。当我尝试url localhost/drupal7/yauisauth/callback时,我得到了“此服务器上未找到请求的url/usr/share/drupal7/index.php”。请注意,它不是拒绝我的路由,而是使用drupal7的文件系统地址而不是web地址(/usr/share/drupal7而不是localhost/drupal7)拒绝index.php。显然,我需要为路由做一些不同的事情,但我不知道是什么。这确实解决了这个问题,但事实上,它是好的被另一个问题掩盖了。非常感谢。