在每条路线运行之前运行数据库查询 [英] Running a database query before every route runs

查看:92
本文介绍了在每条路线运行之前运行数据库查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我正在使用Slim Framework,idiorm和twig来构建应用程序,并为菜单创建一个单独的模板文件,该文件包含在每个页面中.该菜单具有从数据库查询生成的选择菜单,因此需要包含在每条路由中.如何在每个路由上都没有实际声明此查询的情况下在每个路由上进行查询.

So I am using Slim Framework, idiorm and twig to build an application and have a separate template file for my menu which is included on every page. The menu has a select menu that is generated from a database query and so needs to be included on every route. How can I have this query call on every route without actually declaring it on every route.

我可以使用挂钩系统吗?我不确定该如何解决.

Can I use the hook system. I am not sure how to tackle this.

我希望这是有道理的.

谢谢

推荐答案

是的,您可以将钩子与slim.before.router结合使用,例如:

Yes you're right, you could use the hook with slim.before.router like:

$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();
    }
}

菜单多久更改一次?我认为,如果每天不超过两次,并且这些只是填充选择元素的几个值,那么最好将其放在资源(如json对象)上并直接保存.

How frequently the menu changes? In my opinion if not more than twice per day and those are just a few values to fill a select element, you would be better to have it on a resource (like a json object) and save it directly.

否则,我宁愿每次执行该会话中的第一个查询时都调用该查询,或者将其存储在内存数据库中,例如redis.

Otherwise i would rather call that query everytime the first query in that session is executed or have it on a in memory database like redis.

这篇关于在每条路线运行之前运行数据库查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆