symfony composer 如何认识交响环境

cotxawn7  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(101)

我尝试在"集成"环境中部署应用程序,但在"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

我怎样告诉composer使用parameters_integ. yml文件来创建parameters. yml文件?因为我将在之后有一个生产环境,所以我不能在parameters. yml. dist文件中写入我的参数。
如果你还需要其他信息请告诉我
谢谢你的帮忙

k3bvogb1

k3bvogb11#

1)您应该在VCS中包含composer. jsoncomposer. lock
2)不应在VCS中包含parameters. yml
3)部署Sf应用程序时,应使用composer install

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

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

  • 如果没有parameters. ymlparameters. yml有一些丢失的参数,当你运行composer install时,你将被提示输入丢失的参数和parameters. yml将在composer install过程中被创建/更新

  • 你可以有一个app/config/parameters文件夹,其中包含parameters_prod.ymlparameters_integ. yml文件,在部署过程中,其中一个文件会自动复制到parameters. yml文件中(最复杂的解决方案)

如果希望集成环境可以通过浏览器访问,还需要为集成环境创建一个前端控制器,将web/app. php文件复制到web/app_integ. php,编辑集成环境:

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

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

// ...

更多信息请访问www.example.comhttps://symfony.com/doc/current/configuration/environments.html#creating-a-new-environment
而标题中问题的答案," composer 是如何知道symfony环境的"-我认为 composer 对sf环境毫无概念:)
composer有一个require-dev选项,用于你在生产中不需要的包,运行测试所需的包(例如phpunit),开发过程中的一些调试工具等等。下面是我的一个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,这些包将不会安装在vendor目录中。
但是,Sf如何知道何时在应用程序中包括/省略一些包。
它是在AppKernel. php中定义的。
composer. json中,在"require-dev"键下,我定义了我不希望在生产中使用条令固定装置。
因此,在AppKernel. php中,我放置了以下代码行:

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

而且如果我在生产模式下运行我的应用,就不会有DoctrineFixtureBundle。

jdgnovmf

jdgnovmf2#

最佳做法是在app/config/parameters.yml.dist文件中设置默认参数。
查看此链接:www.example.comhttp://symfony.com/doc/current/best_practices/configuration.html#canonical-parameters
运行时:

composer update

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

相关问题