ecentria/dynamic-parameters-bundle

为Symfony从环境变量中运行时检索参数

dev-master / 1.0.x-dev 2016-10-31 21:36 UTC

README

incenteev/dynamic-parameters-bundle%env()% 参数在Symfony 3.2中的启发。

此包提供了在Symfony 2.7(及以上)中运行时从环境变量中读取参数的方法,与Symfony 3.2中的方法相同(存在一些限制)。

Build Status

安装

安装是一个两步过程

  1. 下载Ecentria的IncenteevDynamicParametersBundle分支
  2. 启用该包

步骤1:使用composer安装包

运行以下composer require命令

$ composer require ecentria/dynamic-parameters-bundle

步骤2:启用包

最后,在kernel中启用该包

// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Incenteev\DynamicParametersBundle\IncenteevDynamicParametersBundle(),
    );
}

使用方法

强烈建议仅将%env()%参数作为常规参数的值使用

# app/config/parameters.yml
parameters:
    database_host: %env(DATABASE_HOST)%

然后可以在以下场景中使用database_host

parameters:
    # can be concatenated with strings/parameters
    dsn: mysql:host=%database_host%;dbname=testdb
    
    # can be used in array
    hosts:
        - localhost
        - %database_host%
    
# can be used in config
doctrine:
    dbal:
        connections:
            default:
                host: %database_host%

# can be used as service argument
services:
    foo:
        class: stdClass
        arguments:
            - %database_host%

直接使用%env(DATABASE_HOST)%(而不是%database_host%)有几个缺点

  1. 当使用动态参数时,环境变量名DATABASE_HOST会重复
  2. 此用例尚未像推荐的那样广泛测试,可能不会按预期工作

运行时检索参数

该包负责处理服务参数,但无法更改$container->getParameter()的行为。然而,它提供了一个服务来获取考虑环境变量的参数。

$this->get('incenteev_dynamic_parameters.retriever')->get('database_host');

动态参数的默认值

有两种选择

(推荐)选项1:使用.env文件(见vlucas/phpdotenv

# .env file in project root
DATABASE_HOST="localhost"

此选项与Symfony 3.2具有向前兼容性。

选项2:使用%default_env()%参数

parameters:
    database_host: %env(DATABASE_HOST)%
    default_env(DATABASE_HOST): localhost

此选项与Symfony 3.2不兼容,其中默认值定义如下

parameters:
    database_host: %env(DATABASE_HOST)%
    env(DATABASE_HOST): localhost # doesn't work before Symfony 3.2

限制

  • 在运行时直接从容器中获取参数将不会使用环境变量
  • 应使用大写名称作为环境变量