2017-12-06 5 views
-2

こんにちは、バンドル別のエンティティに属性を追加するには

私は、Aエンティティがあります。

  • ID
  • ATT1今
  • ATT2

は、私がしたいの(新しい機能を追加する)新しいバンドルを追加するには、ここで特に属性をAに追加したいと思います。Aのようにする必要があります:

  • ID
  • ATT1
  • ATT2
  • newAtt3
  • newAtt4

を、私はAを拡張し、追加する新しいエンティティを作成することを考えていたことを行うために新しい属性。

しかし、2番目のバンドルがインストールされている場合、2番目のエンティティ(およびコントローラ/ビュー)を使用するように最初のバンドルを準備するにはどうすればよいですか?

私は

おかげで...私は最初のバンドルに設定を追加する必要がありますが、私は何を追加することは考えていると思います!

答えて

0

Best Practices for Reusable Bundles

Doctrine Inheritance Mapping

を読んであなたはまた、約Traitsしかし、多くの場合、最良の方法は、インタフェースを使用することであると考えることができます。インターフェイスの助けを借りて、バンドルを以下のようにきれいに設定することができます:

バンドルにどのクラスを使うべきかを指示する設定変数を作成します。これは、バンドルからのデフォルトのクラスAでもかまいませんが、AppBundleからクラスAでもかまいません。その後

$rootNode 
     ->children() 
      ->scalarNode('a_entity') 
       ->defaultValue('AppBundle\\Entity\\A') 
      ->end() 
     ->end() 
    ; 

必須であるすべての機能を持つクラスAのためのインターフェース作る:あなたが渡した場合

class A implements AInterface 
{ 
    // ... 
} 

たび:

interface AInterface 
{ 
    public function setVariable($name, $var); 
    public function getHtml($template); 
} 

とクラスのインターフェイスを実装クラスの代わりにAの代わりにAInterfaceを使用します。

class B 
{ 
    private $a; 

    public function __construct(AInterface $a) 
    { 
     $this->a = $a; 
    } 
} 

これで、構成変数a_entityを別のクラスに変更できます。この他のクラスは、まだインターフェイスAInterfaceを実装する必要があります。

関連する問題