【问题标题】:zend2 doctrine 2 form intgergration OneToOnezend2学说2形式集成OneToOne
【发布时间】:2013-09-29 18:56:02
【问题描述】:

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

我关注了tutorial by gammamatrix

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

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

**可捕获的致命错误:参数 1 传递给 Workers\Form\Fieldset\WorkerAddressFieldset::__construct() 必须 实现接口 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());

}

我非常感谢其他人如何能够将字段集连接在一起的一些建议或工作示例。

【问题讨论】:

    标签: forms doctrine-orm doctrine zend-framework2


    【解决方案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);
        }
    }
    

    【讨论】:

    • 你好,山姆。终于能和你交流真是太好了。我对你的文章非常熟悉:我已经详细阅读了其中的大部分。你真的是我们所有人的一大灵感。感谢您回复我。但是,我不清楚我需要做什么。你能再解释一下吗?
    • @PaulKendal 我已将伪代码更改为 PHP 代码。像这样应该清楚我的意思(我希望)。
    • 嗨,山姆。伟大的。谢谢。今晚我会试一试。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多