Php 多次调用通配符加载程序函数(_load)
我有一个加载器函数,每当用户访问页面时,它就会被过度调用。当然,我只需要它在每个页面请求中运行一次,相反,它被称为多次。早些时候,_load()只在MENU_回调中运行了两次,然后我用默认的MENU_NORMAL_项对它进行了测试,结果增加到了四次。虽然我已经把它改回来,并清除了缓存,但它现在仍然运行四次,我只希望它运行一次 我的问题是,为什么我的加载器函数被多次调用?如有任何见解,将不胜感激Php 多次调用通配符加载程序函数(_load),php,callback,drupal-7,drupal-modules,drupal-hooks,Php,Callback,Drupal 7,Drupal Modules,Drupal Hooks,我有一个加载器函数,每当用户访问页面时,它就会被过度调用。当然,我只需要它在每个页面请求中运行一次,相反,它被称为多次。早些时候,_load()只在MENU_回调中运行了两次,然后我用默认的MENU_NORMAL_项对它进行了测试,结果增加到了四次。虽然我已经把它改回来,并清除了缓存,但它现在仍然运行四次,我只希望它运行一次 我的问题是,为什么我的加载器函数被多次调用?如有任何见解,将不胜感激 $items['daycare/%isValid/home'] = array( 'title
$items['daycare/%isValid/home'] = array(
'title' => 'Daycare Admin Home',
'page callback' => 'daycares_home_page',
'load arguments' => array(0),//Passes 1st part of url 'daycare' as 2nd arg
'page arguments' => array(0),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
function isValid_load($pageID, $pageType){
/*Do stuff to validate wildcard part of URL. Will throw 404/403 if invalid*/
return $pageId;
}
您可以使用的函数查看加载函数的调用方式
function isValid_load($pageID, $pageType){
ddebug_backtrace();
...
}
当您这样做时,请注意这两个调用可以追溯到中的最后两行。第一个引导Drupal并初始化主题,而第二个调用实际执行呈现页面的工作。尽管这两个操作似乎调用了相同的函数,这导致了对函数的调用
function isValid_load($pageID, $pageType){
ddebug_backtrace();
...
}
另外,如果您关心性能,您可能会对此感兴趣
我意识到这是一个部分答案,因为我自己仍在熟悉Drupal最深层的工作原理。我欢迎有竞争性的答案,这些答案可以更清楚、更完整地解释为什么Drupal框架的结构会多次调用加载函数。您的答案仍然非常有用!谢谢Nmc。我将尝试使用回溯。我不太关心性能,仅此而已。我将在_load()中处理的操作是相当简单的查询。不过,我还是把这篇文章作为书签,以备将来使用另一个选项是配置xdebug并通过调试器推送代码,尽管有时配置起来有点棘手。然后,您可以在通配符加载程序上粘贴断点,检查值,查看调用堆栈等。