2014-07-22 29 views
-1

因此,我使用Slim Framework,idiorm和樹枝來構建應用程序,併爲每個頁面上包含的菜單分別設置了一個模板文件。該菜單具有從數據庫查詢生成的選擇菜單,因此需要包含在每個路徑中。我怎樣才能在每條路線上進行這個查詢調用,而無需在每條路線上實際聲明它。在每條路線運行之前運行數據庫查詢

我可以使用掛鉤系統嗎?我不知道如何解決這個問題。

我希望這是有道理的。

感謝

+0

你可以關閉這個問題,或者你沒有找到答案嗎? –

+0

對不起,延誤了。 –

回答

0

是的,你說得對,你可以使用掛鉤,與像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)中。

+0

嘿謝謝。不使用slim ioc。它仍然是可能的。這對我來說都很新鮮。任何其他建議都會很棒。 –

+0

什麼是您的數據庫?我已經更新了一個例子,您將從mysql數據庫中檢索菜單。 –

+0

我不能編輯上面的評論,但你也要求幫助把菜單數據到你的HTML?如果是這樣,你是否將任何模型傳遞給視圖?你可以從那裏傳遞菜單,並有一個幫助器來獲取具有相同屬性或更容易的模型,只需將菜單保存在會話中並在視圖中使用它。 (我很抱歉,但我不知道你是多麼新,以確保你是否問這是什麼) –

相關問題