1

我想问一下,是否有可能添加一个全局变量,例如or ,sf_params或者sf_data是否有可能扩展其中一个?sf_usersf_context

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

你们中的任何人都对如何将一个新的全局变量或全局对象实现到 symfony 中得到了一些建议,它可以从项目中的几乎任何地方访问?

4

2 回答 2

2

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

  1. 创建一个静态类,它将查询数据库并填充sfConfig对象,
  2. 添加一个过滤器,它将调用此类以在任何请求时执行其作业。
于 2012-07-19T13:34:52.523 回答
2

我同意@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');

schema.yml我的桌子Config

Config:
  columns:
    name:     { type: string(255) }
    content:  { type: string(1000) }
于 2012-07-19T13:54:06.127 回答