2014-07-22 45 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?如果是这样,你是否将任何模型传递给视图?你可以从那里传递菜单,并有一个帮助器来获取具有相同属性或更容易的模型,只需将菜单保存在会话中并在视图中使用它。 (我很抱歉,但我不知道你是多么新,以确保你是否问这是什么) –

相关问题