Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
Php 多次调用通配符加载程序函数(_load)_Php_Callback_Drupal 7_Drupal Modules_Drupal Hooks - Fatal编程技术网

Php 多次调用通配符加载程序函数(_load)

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

我有一个加载器函数,每当用户访问页面时,它就会被过度调用。当然,我只需要它在每个页面请求中运行一次,相反,它被称为多次。早些时候,_load()只在MENU_回调中运行了两次,然后我用默认的MENU_NORMAL_项对它进行了测试,结果增加到了四次。虽然我已经把它改回来,并清除了缓存,但它现在仍然运行四次,我只希望它运行一次

我的问题是,为什么我的加载器函数被多次调用?如有任何见解,将不胜感激

$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并通过调试器推送代码,尽管有时配置起来有点棘手。然后,您可以在通配符加载程序上粘贴断点,检查值,查看调用堆栈等。