如何在不使用DotEnv的情况下在Symfony应用程序中定义APP_ENV?

时间:2019-04-30 17:38:23

标签: php symfony

默认情况下,Symfony需要配置以在Web服务器上而不是在应用程序中进行设置。就我而言,在服务器上设置这些变量非常复杂。因此,我要在应用程序(php或yaml)中设置这些变量,而没有DotEnv和Web服务器环境变量

这些是我需要定义的环境变量:

APP_ENV 
APP_SECRET
DATABASE_URL
MONGODB_URL
MAILER_URL

除了APP_ENV在任何地方都无法正常工作之外,这里是我发现的东西:

APP_ENV: ???
APP_SECRET: config/packages/framework.yaml
DATABASE_URL: config/packages/doctrine.yaml
MONGODB_URL: config/packages/doctrine_mongodb.yaml
MAILER_URL: config/packages/swiftmailer.yaml

在Symfony 4中我们在哪里定义APP_ENV

1 个答案:

答案 0 :(得分:2)

您可以使用.env.local.php返回一个数组。

此文件通常是通过运行composer dump-env [env]生成的,但是没有什么可以阻止您手动创建它。

此文件在之前之前已加载。DotEnv加载“ .env”文件,它是一个简单的数组,已与$_SERVER$_ENV合并。如果该文件存在,则根本不使用DotEnv组件。

例如您可以返回以下内容:

return [
  'APP_ENV'           => 'prod',
  'APP_SECRET'        => 'verysecretmuchobscure',
  'CORS_ALLOW_ORIGIN' => '^https?://localhost(:[0-9]+)?$',
  'DATABASE_URL'      => 'mysql://db_user:db_password@127.0.0.1:3306/db_name',
  'JWT_SECRET_KEY'    => '%kernel.project_dir%/var/keys/private.pem',
  'JWT_PUBLIC_KEY'    => '%kernel.project_dir%/var/keys/public.pem',
  'JWT_PASSPHRASE'    => 'anotherthing',
];

如果您使用的是Symfony 4.1+,则所有这些都适用。在您的问题中,您说的是Symfony 4,但未指定您使用的是哪个次要版本。

如果您使用的是4.0,则需要按照here详细的步骤升级应用程序:

  1. 从存储库中复制bootstrap.php
  2. 从存储库中复制index.php,或更新您的index.php,使其与要求bootstrap.php的匹配(如果您的index.php进行了修改)
  3. 与您的console脚本(如果存在)相同。
  4. 更新您的主要.gitignore
  5. 重命名/移动/删除您现有的.env文件。