3

Symfony2 DIC とセマンティック コンフィギュレーションについて多くのことを読んだ後、私は自問自答しました。

シナリオ

「管理ダッシュボード ディスパッチャ」のようなサービスを作成したいとします。
これは、CRUD を実行したいエンティティがいくつかあることを意味します。私がやりたくないのは、プロジェクト内のすべてのエンティティのルート - >アクション - >ロジックの組み合わせです。これは、そのように、オブジェクトごとに次のように記述する必要があるためです。

  • /追加/エンティティ
  • addEntityAction
  • エンティティロジック

もちろん、「エンティティ」はオブジェクト内のエンティティの名前です。

アクション (追加-削除-編集) に応答するサービス (ディスパッチャーなど) を構築していますが、それはパラメーター化されています: アドレスバーに/add/entityAorのようなものを書き込み/add/entityB、そのルートが同じアクションにつながります (もちろん)エンティティ名でサービスを思い出しました。
この時点で、私のサービスは、オブジェクト内のエンティティの EntityClass、FormTypeClass、およびテンプレート ファイルが何であるかを知ることができるはずです。

そして、ここに私の精神的混乱が来ます

次のphp配列のような予備構成を行う必要があります(これは単なる例です)

array(
'EntityA'=>array(
  'class'=>'BundleName/Entity/EntityA',
  'form'=>'BundleName/Form/entityAType',
  'template'=>'EntityATemplate'),
'EntityB'=>array(
  'class'=>'BundleName/Entity/EntityB',
  'form'=>'BundleName/Form/entityBType',
  'template'=>'EntityBTemplate'),
[...]
);

または同等のもの。

しかし ....

私と私のチームだけがこのバンドルを使用することを考慮して、このシナリオのベスト プラクティスは何ですか?

最初の解決策

parameters.phpいくつかの定数または静的メンバーを定義したファイルを使用する

2 番目の解決策

マップ (前の配列など) をサービスに直接使用する

3番目の解決策

バンドルにセマンティック構成を使用し、拡張クラスを定義するなど

正直なところ、どちらが良いとは言えません。明らかに、最初のものと 3 番目のものは 2 番目のものよりも優れています。
最初のソリューションは symfony2 の哲学を壊しましたが、唯一の方法のようです。なぜなら、2 番目のソリューションは、私の DIC で直接処理される、または構成階層を持つために (カスケード方式で) いくつかのサービスの作成をトリガーする必要がある場合にのみ役立つように思われるからです。複数の構成ファイルをマージするため、または(おそらくサードパーティのバンドルにとって最も重要な)構成で何らかの検証を行うため。ファイル

あなたの意見は何ですか?これを行うための他の方法がいくつかありますか、それとも単純に 3 番目の解決策を好みますか? 私はあなたの意見を知りたいです。

編集:明らかに、ビルダー注入またはセッター注入を使用できますが、「DIC」セクションと見なします(したがって、3番目のソリューション)

4

1 に答える 1

0

Symfony の方法でそれを行いたい場合は、構成を使用することをお勧めします (正しく理解していれば):

acme_foo:
    entities:
        FooEntity:
            class_type: Acme\FooBundle\Entity\Foo
            form_type: Acme\FooBundle\Form\Type\FooType
            template: AcmeFooBundle:Entity:foo.html.twig
        BarEntity:
            class_type: Acme\FooBundle\Entity\Bar
            form_type: Acme\FooBundle\Form\Type\BarType
            template: AcmeFooBundle:Entity:bar.html.twig

クラスを使用してAcmeFooExtension、構成を含むコンテナーパラメーターを設定できます。これをサービス (イベント リスナー) に挿入できます。が呼び出されると、リスナーによって消費されるイベントを/add/Fooディスパッチできます。acme_foo.entity_add

覚えておくべきことは、config.phpまたはparameters.phpファイルに入れることができるものはすべて、アプリ構成 ( config.yml) に入れることができるということです。

于 2013-04-16T13:46:36.417 に答える