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を実装する必要があります。