因此,我使用Slim Framework,idiorm和樹枝來構建應用程序,併爲每個頁面上包含的菜單分別設置了一個模板文件。該菜單具有從數據庫查詢生成的選擇菜單,因此需要包含在每個路徑中。我怎樣才能在每條路線上進行這個查詢調用,而無需在每條路線上實際聲明它。在每條路線運行之前運行數據庫查詢
我可以使用掛鉤系統嗎?我不知道如何解決這個問題。
我希望這是有道理的。
感謝
因此,我使用Slim Framework,idiorm和樹枝來構建應用程序,併爲每個頁面上包含的菜單分別設置了一個模板文件。該菜單具有從數據庫查詢生成的選擇菜單,因此需要包含在每個路徑中。我怎樣才能在每條路線上進行這個查詢調用,而無需在每條路線上實際聲明它。在每條路線運行之前運行數據庫查詢
我可以使用掛鉤系統嗎?我不知道如何解決這個問題。
我希望這是有道理的。
感謝
是的,你說得對,你可以使用掛鉤,與像slim.before.router:
$app->hook('slim.before.router', function() use($app) {
$svc = $app->menuService; // do you use slim ioc?
$menu = $svc->getMenu(); // inject the menu to the app
$app->menu = $menu;
});
你也可以使用一箇中間件
class MyMiddleware extends \Slim\Middleware
{
public function call()
{
$conn = new PDO('mysql:host=localhost;dbname=example', 'username', 'password');
$q = $conn->prepare("SELECT id, key, value FROM menu_items");
$menu = $q->fetch();
$this->app->menu = $menu;
$this->next->call();
}
}
如何頻繁菜單改變了嗎?在我看來,如果每天不超過兩次,並且這些只是填充select元素的幾個值,那麼最好將它放在資源(如json對象)上並直接保存。
否則,我寧願每次執行該會話中的第一個查詢時調用該查詢,或者將其放在內存數據庫(如redis)中。
嘿謝謝。不使用slim ioc。它仍然是可能的。這對我來說都很新鮮。任何其他建議都會很棒。 –
什麼是您的數據庫?我已經更新了一個例子,您將從mysql數據庫中檢索菜單。 –
我不能編輯上面的評論,但你也要求幫助把菜單數據到你的HTML?如果是這樣,你是否將任何模型傳遞給視圖?你可以從那裏傳遞菜單,並有一個幫助器來獲取具有相同屬性或更容易的模型,只需將菜單保存在會話中並在視圖中使用它。 (我很抱歉,但我不知道你是多麼新,以確保你是否問這是什麼) –
你可以關閉這個問題,或者你沒有找到答案嗎? –
對不起,延誤了。 –