0

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

我按照gammamatrix 的教程进行操作

我能够成功地整合教义并能够水合其中一个实体。

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

**可捕获的致命错误:传递给 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 传递给类。但它似乎没有收到这些值。我不清楚为什么。

第二个字段集(workerAddress):

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

那是因为您尝试从字符串添加字段集。鉴于您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);
    }
}
于 2013-09-30T07:41:32.793 回答