在Symfony2中存储简单变量(如“总行数”)的最佳实践

时间:2013-11-15 16:45:15

标签: symfony

在我的symfony2应用程序中,我需要在所有页面的顶部显示一些总计,即“已经注册了200,154,555位用户”。

我不想运行查询来计算每个页面加载的计数。我提出的解决方案是创建一个“变量”实体,它有两列,名称和值。然后我将设置一个在cron上运行的控制台命令,它将使用一个计算所有人行等的查询来更新这些变量实体(例如“totalPeople”)。

这感觉有点沉重......这个问题有更好的解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以设置全局参数并添加服务以重写它们。然后从您的Command中调用该服务。

或者直接设置服务来读/写文件(例如json数组)。

或者设置一个包含存储数据的行的选项表。这不会是一种资源密集型查询。

以下是我用来存储RSS源的信息(解析后)

  public function checkCache($data=array(), $path = '')
  {
    foreach ($data as $service => $feed)
    {
      $service = strtolower($service);
      $service =  str_replace(' ', '-', $service);
      $path = $path.'web/bundles/citation/cache/rss/' . $service . '.cache';
      if ((!file_exists($path) || time() - filemtime($path) > 900) && $cache = fopen($path, 'w'))
      {

        $rss_contents = $this->getFeed($feed); //fetch feed content & returns array 
        fwrite($cache, serialize($rss_contents));
        fclose($cache);
        return $rss_contents;
      }
      else
      {

        $cache = fopen($path, 'r');
        return unserialize(file_get_contents($path));
        fclose($cache);

      }
    }
  }

例如,您可以在后端实现该功能,因此每次管理员登录时都会检查缓存,只有当它太旧时才刷新。虽然我也非常喜欢4AM cron作业解决方案。

答案 1 :(得分:0)

你可以使用教义的分页功能(如果你使用教义)。这将利用查询的“限制”部分(即使使用连接),并将为您提供总行数(通过计数查询)。