我想问一下,是否有可能添加全局变量,例如sf_params
或sf_data
,sf_user
,sf_context
或是否有可能扩展一个那些?
我想在运行时(部分,模板和操作)中更改一些应用程序参数。
现在sf文档建议使用类似app.yml
的东西,但我的问题是,我需要在设置这个参数之前执行一些代码。因此需要非常动态地设置它们,app.yml
无法实现这一点。
你们中的任何人都有一些建议如何将新的全局变量或全局对象实现到symfony中,几乎可以从项目的任何地方访问它?
答案 0 :(得分:2)
存储配置数据的最佳位置是sfConfig
对象,该对象在项目的任何部分都可用。因此,您必须在数据库中查询配置数据,并通过sfConfig::set('variableName', $value)
填充sfConfig对象。所以:
sfConfig
对象答案 1 :(得分: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) }