0

Doctrine 2 を Zend 2に統合しようとしています。フォームで 2 つのエンティティを結合したいと考えています。つまり、ONEToOne。

gammamatrix によるチュートリアルに従いました。

ドクトリンの統合に成功し、エンティティの 1 つをハイドレートすることができました。

2 番目のエンティティ フィールドセットを最初のエンティティに結合しようとすると、問題が発生します。次の致命的なエラー メッセージが表示され続けます。

**キャッチ可能な致命的なエラー: Workers\Form\Fieldset\WorkerAddressFieldset::__construct() に渡される引数 1 は、インターフェイス Doctrine\Common\Persistence\ObjectManager を実装する必要があります。指定されていません**

フィールドセットから始めて、ObjectManager を両方のフィールドセットに渡そうとした方法を示します。

最初のフィールドセット: AboutYou (これは関係の所有者です);

コントローラー ページのフォームを介して ObjectManager を渡します。

$form = new CreateAboutYouForm($this->getEntityManager());

以下のコードの最初の部分は単独で動作します。つまり、workeraddressfieldset をコードに配置しない場合です。

class AboutYouFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct(ObjectManager $objectManager)
    {
        parent::__construct('AboutYou');

        $this->setHydrator(new DoctrineHydrator($objectManager, 'Workers\Entity\AboutYou'))
             ->setObject(new AboutYou()); 

$this->add(array(
            'name' => 'firstName',
            'type' => 'Text',
            'options' => array(
                'label' => 'First Name',
            ),
        ));

$addressFieldset = new WorkerAddressFieldset($objectManager);
         $this->add(array(
            'type' => 'Workers\Form\Fieldset\workerAddressFieldset',
            'name' => 'WorkerAddress',
            'options' => array(
                'label' =>  $addressFieldset
            )
        ));

}

上記で、 workerAddressFieldset オブジェクトを作成し、その方法で ObjectManager をクラスに渡そうとしたことに気付くでしょう。しかし、値を受け取っていないようです。理由はわかりません。

2 番目のフィールドセット (workersAddress):

class WorkerAddressFieldset extends Fieldset implements InputFilterProviderInterface
{
    public function __construct(ObjectManager $objectManager)
    {
        parent::__construct('WorkerAddress');

        $this->setHydrator(new DoctrineHydrator($objectManager, 'Workers\Entity\WorkerAddress'))
             ->setObject(new WorkerAddress());

}

他の人がどのようにフィールドセットに参加できたかについてのアドバイスや実用的なサンプルをいただければ幸いです。

4

1 に答える 1

1

これは、String から Fieldset を追加しようとするためです。AddressFieldsetただし、最初にFieldset__construct(ObjectManager $om)をインスタンス化してからフォームに追加する必要があります。お気に入り:

class AboutYouFieldset extends Fieldset 
{
    public function __construct(ObjectManager $objectManager)
    {
        parent::__construct('about-you');

        $this->add(); // your first element

        $fieldset = new WorkerAddressFieldset($objectManager);
        $this->add($fieldset);
    }
}
于 2013-09-30T07:41:32.793 に答える