2012-08-09 67 views
9

我无法找到一种方法来包含不同的security.yml文件,这些文件将根据Symfony2的环境包含在内。例如,我想为我的验收测试设置一个内存中的用户提供者,因为我不需要在这里测试我的实体和东西,我只想对我的观点进行验收测试。针对不同环境的不同security.yml文件

但事实证明,这不是一件容易的事情。我从我的config.yml中删除了security.yml,将其更名为security_prod.yml,并创建了一个security_test.yml,其中包含in_memory用户提供商。然后我分别在我的生产和测试配置中包含了security_prod.ymlsecurity_test.yml

然而,这似乎并没有在所有的工作:

$ SYMFONY_ENV=test app/console cache:clear              

    [Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]               
    You are not allowed to define new elements for path "security.providers". Please define all elements for this path in one config file. 

$ SYMFONY_ENV=prod app/console cache:clear              

    [Symfony\Component\Config\Definition\Exception\ForbiddenOverwriteException]                   
    Configuration path "security.access_control" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one 
    configuration section.                                

这在我看来就像security.yml文件名被硬编码(这将是Symfony的方式太怪异了),而事实并非如此。

所以问题是:我怎么用Symfony获得多个security.yml?什么可能导致这种行为?

+3

您可以发布您config.yml config_prod.yml和config_test.yml(或至少部分包括文件在内)? – 2012-08-09 08:45:54

+2

@CarlosGranados,谢谢你的关心,但事实证明,问题发现坐在我的办公室椅子上。我包括我的security.ymls两次:) – kix 2012-08-09 09:12:00

+0

这就是我所怀疑的,这就是为什么我要求你发布这些文件 – 2012-08-09 09:15:37

回答

2

指令对于那些,谁是寻找它(以及不红评论):

  1. 针对不同的环境创建不同config文件:config_test.ymlconfig_dev.ymlconfig_prod.yml
  2. 创建不同security文件:security_test.ymlsecurity_dev.ymlsecurity_prod.yml
  3. 导入security_test.ymlconfig_test.yml等等其他环境。举例config_test.yml

    imports: 
        - { resource: security_test.yml } 
    
  4. 请确保您已经security_*.yml只有一次(基本上笔者这样做是错误的)
相关问题