zend2 doctrine 2形式整合OneToOne

时间:2013-09-29 18:56:03

标签: forms doctrine-orm doctrine zend-framework2

我正在尝试将 Doctrine 2集成到我的Zend 2 。我希望加入我的表格中的两个实体;即ONeToOne。

我关注了tutorial by gammamatrix

我能够成功整合学说,并能够为其中一个实体加水。

当我尝试将第二个实体字段集连接到第一个实体时,会出现问题。我不断收到以下致命错误消息:

  

**可捕获的致命错误:参数1传递给   Workers \ Form \ Fieldset \ WorkerAddressFieldset :: __ construct()必须   实现接口Doctrine \ Common \ Persistence \ ObjectManager,none   给定的,**

我将从字段集开始,向您展示我是如何尝试将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传递给该类。但它似乎没有收到价值。我不清楚为什么。

第二个字段集(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());

}

我真的很感激一些建议或其他人如何能够将这些字段集加在一起的工作样本。

1 个答案:

答案 0 :(得分:1)

那是因为您尝试从String添加Fieldset。鉴于您的AddressFieldset有一个__construct(ObjectManager $om),但您首先需要实例化Fieldset,然后将其添加到表单中。像:

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);
    }
}