2

ユーザーがページにアクセスするたびに過度に呼び出されるローダー関数があります。当然、ページリクエストごとに1回だけ実行する必要がありますが、代わりに複数回呼び出されます。以前、_load()はMENU_CALLBACKで2回しか実行されませんでしたが、デフォルトのMENU_NORMAL_ITEMでテストしたところ、4に増えました。元に戻してキャッシュをクリアしましたが、今でも4回実行されているので、1回だけ実行したいと思います。

私の質問は、なぜ私のローダー関数が複数回呼び出されるのですか?任意の洞察をいただければ幸いです。

$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

develの関数を使用ddebug_backtrace()して、load関数をどのように/何が呼び出しているかを確認できます。

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

その場合、2つの呼び出しはの最後の2行までさかのぼることができることに注意してくださいindex.php。最初の呼び出しはDrupalをブートストラップしてテーマを初期化し、2番目の呼び出しは実際にページのレンダリング作業を行います。どちらのアクションも同じように呼び出されているように見えますが、_menu_translate()その結果、関数が呼び出されます。

ちなみに、パフォーマンスが気になる場合は、キャッシュに関するこのLullabotの記事に興味があるかもしれません。

Drupalの最も深い働きにまだ慣れているので、これは部分的な答えだと思います。Drupalフレームワークが_load関数が複数回呼び出されるように構成されている理由をより明確かつ完全に説明できる競合する回答を歓迎します。

于 2012-08-05T03:58:24.953 に答える