是否可以在表达式中使用参数? 我在parameters.yml中有一个设置,我在其中定义了当前使用的环境,我想相应地调整所有配置。即我有一个数据库连接,我试图根据所使用的env设置ip(ip地址显然与真实地址不同):
$s = 'Cycle count Stored as a <a href="poem://plaspoem/POEM?LOC=MAIN&CMD=VIEW&KEY=CYCLE COUNT&REV=A">Cycle count</a> which is a count of records Cycle count';
echo "Approach 1: " . preg_match_all('~<a\b[^<]*?>[^<]*</a>(*SKIP)(?!)|\bcount\b~', $s) . "\n\nApproach 2: ";
echo preg_match_all('~\bcount\b(?![^<]*</a>)~', $s);
但是symfony给了我一个错误:
出了点问题。错误:SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo失败:不可恢复的错误 在数据库查找期间发生。
我做错了什么但是什么?甚至可以在表达式中使用params,还是表达本身错了?
答案 0 :(得分:1)
从Symfony 2.4 - 3.2开始回答您的具体问题; @=
前缀用于加载带有字符串的an Expression object,并且编译器无法在parameters:
上下文中转储。但可以在services:
上下文中使用。
请参阅:bug report on github了解更多信息。
解决您的使用案例;最好使用特定于环境的配置,Symfony在documentation for creating new environments中的描述。
您的目录结构应如下所示。
app
config
config.yml
config_dev.yml
config_prod.yml
config_prod1.yml
config_stage.yml
....
parameters.yml
web
app.php
app_dev.php
app_prod1.php
app_stage.php
config.yml
旨在包含适用于所有环境的配置,服务和参数。
所有其他config_[environment].yml
文件可以包含特定于环境的配置,服务和参数。这会略微改变基础config.yml
值。
parameters.yml
包含canonical parameter值,默认为altered,只要您运行php composer.phar install
,只要您将更新部署到生产环境,就应该这样做< / em>的。因此,最好将其保留为parameters.yml.dist
文件,而不是手动更改。
为了加载特定的环境配置;默认情况下,Symfony会在容器编译期间自动尝试加载app/config/config_%kernel.environment%.yml
文件。因此,特定于环境的配置加载已经存在。
php bin/console --env=prod1 --no-debug cache:warmup
请参阅AppKernel::registerContainerConfiguration方法。
$loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
但是,您需要configure your webserver指向所需的Web前端控制器文件。 app.php
,app_prod1.php
等。他们告诉Symfony启动哪个应用环境并设置调试模式。
将web/app.php
复制到web/app_prod1.php
并更改AppKernel加载的环境。
$kernel = new AppKernel('prod1', false);
Symfony Web服务器
php bin/console --env=prod1 server:run
Apache /web/.htaccess
将第1行的DirectoryIndex更改为所需的环境
DirectoryIndex app_prod1.php
然后更改重写规则
RewriteRule .? %{ENV:BASE}/app_prod1.php [L]
和
RedirectMatch 302 ^/$ /app_prod1.php/
否则,请在VirtualHost文件中配置mod重写并禁用.htaccess以指向所需的环境。这对您的服务器环境非常主观(php-fpm,NginX等)。
一旦Web服务器加载了适当的环境,配置文件就可以级联,但这是可取的。
<强> config.yml 强>
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
framework:
templating:
engines: ['twig']
form: ~
doctrine:
dbal:
host: %database_host%
#...
<强> config_prod1.yml 强>
imports:
- { resource: config.yml } #load the global/default settings
framework:
form: { enabled: true } #enable the form setting while keeping all other values
#define environment specific services (usually best declared in a bundle)
services:
app.my_service: '@service'
#override the parameters.yml setting loaded by config.yml or declare new ones
parameters:
database_host: 192.168.1.2
<强>替代强>
parameters_%kernel.environment%.yml
个文件并导入它们
单独到各自的环境配置文件。 您还可以根据特定条件或系统环境变量将app.php
配置为load different environments。但是,这在生产中不能很好地扩展,并且可能会导致某些缓存机制出现问题。