2

我有一个加载器函数,每当用户访问页面时都会过度调用它。自然,我只需要它在每个页面请求运行一次,而是多次调用它。早些时候,_load() 只用 MENU_CALLBACK 运行了两次,然后我用默认的 MENU_NORMAL_ITEM 对其进行了测试,它增加到了四次。虽然我已经将它改回来,并清除了我的缓存,但它现在仍然运行了四次,我只希望它运行一次。

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

$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;
}
4

1 回答 1

3

您可以使用develddebug_backtrace()函数来查看调用加载函数的方式/内容。

function isValid_load($pageID, $pageType){
    ddebug_backtrace();
    ...
}

当您这样做时,请注意这两个调用可以追溯到index.php. 第一个引导 Drupal 并初始化主题,而第二个调用实际上完成了呈现页面的工作。虽然这两个动作似乎调用相同_menu_translate()的结果导致调用你的函数。

附带说明一下,如果您关心性能,您可能会对这篇关于缓存的 Lullabot 文章感兴趣。

我意识到这是一个部分答案,因为我自己仍然熟悉 Drupal 最深层的工作原理。我欢迎相互竞争的答案,这些答案可以提供更清晰和更完整的解释,解释为什么 Drupal 框架的结构会多次调用 _load 函数。

于 2012-08-05T03:58:24.953 回答