在所有模板中注入全局变量



我想问,是否有可能添加像sf_paramssf_datasf_usersf_context这样的全局变量,或者是否有可能扩展其中一个?

我想在运行时中更改一些应用程序参数(在部分、模板和操作中)。现在sf文档建议使用类似app.yml的东西,但我的问题是,在设置这个参数之前,我需要执行一些代码。因此,它们需要非常动态地设置,这在app.yml中是不可能的。

你们中的任何人都有一些建议,如何在symfony中实现一个新的全局var或全局对象,该对象几乎可以从项目中的任何地方访问?

我同意@olivierw的解决方案。

对于个人项目,我有一个名为Config的表,我使用过滤器加载内容,这样我就可以访问项目中的任何地方。

滤波器lib/filter/configFilter.php:

<?php
class configFilter extends sfFilter
{
  public function execute ($filterChain)
  {
    // get the config
    $configs = Doctrine_Core::getTable('Config')>findAll();
    foreach($configs as $config)
    {
      sfConfig::set('my_config_'.$config->getName(), $config->getContent());
    }
    // execute next filter
    $filterChain->execute();
  }
}

apps/frontend/config/filters.yml:中

rendering: ~
configFilter:
  class: configFilter
security:  ~

现在您可以使用访问任何信息

sfConfig::get('my_config_key');

我的Config表的schema.yml

Config:
  columns:
    name:     { type: string(255) }
    content:  { type: string(1000) }

存储配置数据的最佳位置是sfConfig对象,该对象在项目的任何部分都可用。因此,您必须在数据库中查询配置数据,并通过sfConfig::set('variableName', $value)填充sfConfig对象。因此:

  1. 创建将查询数据库并填充CCD_ 14对象的静态类
  2. 添加一个过滤器,该过滤器将在任何请求时调用此类来执行其作业

最新更新