我想问,是否有可能添加像sf_params
或sf_data
、sf_user
、sf_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对象。因此:
- 创建将查询数据库并填充CCD_ 14对象的静态类
- 添加一个过滤器,该过滤器将在任何请求时调用此类来执行其作业