11

security.ymlSymfony2の環境に応じて含まれるさまざまなファイルを含める方法を見つけることができませんでした。たとえば、受け入れテスト用のメモリ内ユーザープロバイダーが必要でした。これは、エンティティなどをここでテストする必要がないためです。ビューの受け入れテストのみを行います。

しかし、結局のところ、それは簡単なことではありません。security.ymlのインクルードから削除しconfig.yml、名前を変更して、ユーザープロバイダーを持つsecurity_prod.ymlを作成しました。次に、本番構成とテスト構成をそれぞれ含めました。security_test.ymlin_memorysecurity_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にはあまりにも奇妙なことです)、そうではありませんでした。

security.ymlだから問題は: Symfonyで複数のを取得するにはどうすればよいですか?そして、何がこの振る舞いを引き起こしているのでしょうか?

4

1 に答える 1

4

それを探している人のための指示(そしてコメントを赤くしないでください):

  1. 環境ごとに異なるconfigファイルを作成します: config_test.yml、、config_dev.ymlconfig_prod.yml
  2. 別のファイルを作成しsecurityます:security_test.yml、、security_dev.ymlsecurity_prod.yml
  3. 他の環境では、インポート などsecurity_test.ymlconfig_test.yml行います。例config_test.yml

    imports:
      - { resource: security_test.yml }
    
  4. あなたが一度だけ含めたことを確認してくださいsecurity_*.yml(基本的に著者はこの間違いをしました)
于 2017-01-12T08:47:37.877 に答える