作曲家如何知道symfony环境

时间:2016-12-06 16:35:21

标签: symfony composer-php

我尝试在“集成”环境中部署应用程序,但在“composer update”命令之后,生成的parameters.yml文件不包含可能的集成参数

这是我做的: 我在app / config中创建了一个“config_integ.yml”文件:

# app/config/config_integ.yml
imports:
    - { resource: parameters_integ.yml }
    - { resource: config.yml }

framework:
    profiler: { only_exceptions: false }

parameters_integ.yml文件包含集成环境的参数。开始的例子:

parameters:
    database_host: localhost
    database_port: null
    database_name: test_integ
    database_user: root

parameters.yml.dist包含这些参数,默认值为:

parameters:
    database_host:     127.0.0.1
    database_port:     ~
    database_name:     symfony
    database_user:     root

我如何告诉作曲家采用parameters_integ.yml文件来构建parameter.yml文件?因为之后我将有一个prod环境,我无法在parameters.yml.dist文件中编写我的参数。

告诉我你是否需要其他信息

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

1)您应该在VCS中包含 composer.json composer.lock

2)您不应在VCS中包含 parameters.yml

3)部署Sf应用程序时,您应该使用 composer install

4)我可以想到在集成环境中创建 parameters.yml 的几种方法:

  • 您手动创建 parameters.yml 文件并将其放在 parameters.dist.yml
  • 旁边

  • 如果没有 parameters.yml parameters.yml 有一些缺少的参数,当您运行 composer install 时,系统会提示您输入缺少的参数,参数。 过程中将创建/更新 parameters.yml

  • 您可以拥有 app / config / parameters 文件夹,其中包含 parameters_prod.yml parameters_integ.yml 文件,其中一个文件是在部署期间自动复制到 parameter.yml 文件(最复杂的解决方案)

如果您希望通过浏览器访问集成环境,则还应为其创建前端控制器。将 web / app.php 文件复制到 web / app_integ.php 并编辑要集成的环境:

// web/app_integ.php
// ...

// change just this line
$kernel = new AppKernel('integ', false);

// ...

https://symfony.com/doc/current/configuration/environments.html#creating-a-new-environment

的更多信息

标题中问题的答案,"作曲家如何知道symfony环境" - 我认为作曲家不了解Sf环境:)

作曲家对你在制作中不需要的软件包,运行测试所需的软件包(例如phpunit),开发过程中的一些调试工具等具有 require-dev 选项。 举个例子,我的 composer.json 文件之一就是这样的:

...
"require-dev": {
    "sensio/generator-bundle": "^3.0",
    "symfony/phpunit-bridge": "^3.0",
    "doctrine/doctrine-fixtures-bundle": "^2.3",
    "nelmio/alice": "^2.1",
    "deployer/deployer": "^4.0"
},
...

如果我运行composer install --no-dev,这些软件包将不会安装在供应商目录中。

但是,Sf如何知道何时在应用程序中包含/省略某些包。

AppKernel.php

中定义

composer.json 中的" require-dev"关键我定义我不想在生产中使用教义装置。

所以,在 AppKernel.php 里面我放了这些代码行:

if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
    ...
    $bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
}

如果我在生产模式下运行我的应用程序,就不会有DoctrineFixturesBundle。

答案 1 :(得分:0)

最佳做法是在app/config/parameters.yml.dist文件中设置默认参数。

查看此链接: http://symfony.com/doc/current/best_practices/configuration.html#canonical-parameters

当你跑步时:

composer update

它将使用parameters.yml.dist并使用parameters.yml文件中的值覆盖dist