我试图在Symfony2项目中使用named constants,这是我内部第三方代码所要求的。有没有办法使用Symfony2 ymls管理这样的配置参数?
答案 0 :(得分:1)
我发现了这个,这是官方Symfony 2
文档的一部分,看起来很有趣:
How to Set External Parameters in the Service Container
文档的最后一节很有意思,因为它描述了如何使用PHP include
语句在应用程序配置中运行任何PHP脚本文件。
文件:
imports指令可用于引入存储在别处的参数。导入PHP文件使您可以灵活地添加容器中所需的任何内容。以下导入名为parameters.php。
的文件YAML
# app/config/config.yml
imports:
- { resource: parameters.php }
XML
<!-- app/config/config.xml -->
<imports>
<import resource="parameters.php" />
</imports>
PHP
// app/config/config.php
// $loader->import('parameters.php');
// our third party config
$loader->import('ThirdPartyDefines.php');
现在,只需创建一个名为:
的脚本即可 ThirdPartyDefines.php
在该文件中有所需的定义:即。
define('THIRD_PARTY_V1', 'ACME_value1');
define('THIRD_PARTY_V2', 'ACME_value12');
等
答案 1 :(得分:0)
您可以使用parameters:
$container->hasParameter('namedConstant');
$container->getParameter('namedConstant');
$container->setParameter('namedConstant', 'a new value');
答案 2 :(得分:0)
您可以创建一个捆绑包,将您的内部代码集成到Symfony中。您可以使用参数或the bundle’s configuration来提供捆绑包随后将定义为常量的值。
想象一下,您生成了一个包GreatInHouseProjectBundle
。您还会获得一个扩展程序GreatInHouseProjectBundle\DependencyInjection\GreatInHouseProjectExtension
。然后你可以在那里定义你的常量。
使用参数:
class GreatInHouseProjectExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
# ...
if( ! defined('THIRD_PARTY_V1') ) {
define(
'THIRD_PARTY_V1',
$container->getParameter('third_party.version')
);
}
}
}
使用捆绑配置:
class GreatInHouseProjectExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
if( ! defined('THIRD_PARTY_V1') ) {
define(
'THIRD_PARTY_V1',
$config['third_party_version']
);
}
}
}