zf2 doctrine2 editAction

时间:2014-02-24 13:04:08

标签: php doctrine-orm zend-framework2

我在编辑实体类别的值时遇到错误。这是我的代码

<a href="<?php echo $this->url('application/default', array('action'=>'edit','id' => $child->getId()));?>">Bearbeiten</a>

在我的IndexController中是Action:

public function editAction()
    {
        $id = (int) $this->params()->fromRoute('id');

        $em = $this->getEntityManager();
        $category = $em->getRepository('Application\Entity\Category')->find($id);

        $form = new CategoryForm();
        $form->setHydrator(new CategoryHydrator());
        $form->bind($category);

        $request = $this->getRequest();

        if($request->isPost())
        {

            $form->setData($this->getRequest()->getPost());
            if($form->isValid())
            {   
                $object = $form->getData();
                $category->setName($object->getName());
                $category->setDescription($object->getDescription());
                $category->setParent($object->getParent());
                $em->flush();
                return $this->redirect()->toRoute('home');
            }   
        }

        return array(
                            'form' => $form
                    );  
    }

这是我的CategoryForm.php:

namespace Application\Form;

use Zend\Form\Form;

class CategoryForm extends Form
{
    public function __construct()
    {
        parent::__construct('categoryForm');

        $this->setAttribute('method', 'post');

        $this->add(array(
            'name' => 'name',
            'attributes' => array(
                'type' => 'text',
                'id' => 'name',
            ),
            'options' => array(
                'label' => 'Ihr Name:',
            ),
        ));

        $this->add(array(
            'name' => 'description',
            'attributes' => array(
                'type' => 'text',
                'id' => 'description',
            ),
            'options' => array(
                    'label' => 'Ihre Beschreibung:',
            ),
        ));

        $this->add(array(
                'name' => 'parent',
                'attributes' => array(
                        'id' => 'parent',
                        'name' => 'parent',
                        'type' => 'hidden',
                ),
        ));

        $this->add(array(
            'name'=>'submit',
            'attributes'=>array(
                        'type' => 'submit',
                        'value' => 'OK',
            ),
        ));

    }
}

以下是我的edit.phtml:

<?php
 $form = $this->form;

 $form->prepare();

 echo $this->form()->openTag($form);
 echo $this->formRow($form->get('name'));
 echo $this->formRow($form->get('description'));
 echo $this->formRow($form->get('parent'));
 echo $this->formSubmit($form->get('submit'));
 echo $this->form()->closeTag();
?>

通过调用“编辑”操作,浏览器显示错误消息:

Object provided to Escape helper, but flags do not allow recursion

有人知道我的错误并且可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

首先,从您的问题来看,只能询问$ child-&gt; getId()是什么。我假设$ child是Category类的一个实例,getId()返回一个整数,即类别的id。所以相反,我只是把它放在我的index.phtml中进行测试:

<a href="<?php echo $this->url('application/default', array('action'=>'edit','id' => 1));?>">Bearbeiten</a>

为了安全起见,我还将一个Category实例传递给index.phtml作为$ child变量,使用你的代码作为链接,并且链接工作,(所以url视图助手没有错) 。无论如何,我可以将URL写入浏览器并单击回车,但由于我不知道您的错误出现在哪里(也许在点击链接后),我必须确保:)

接下来,我完全复制了你的代码,除了这一行:

$form->setHydrator(new CategoryHydrator());

您没有提供保湿剂的代码。我假设你已经创建了它,但没有它显示给我,我只能假设在水化器代码的某处有一个错误。而不是那条线,尝试:

$form->setHydrator ( new \DoctrineModule\Stdlib\Hydrator\DoctrineObject ( $em, 'Application\Entity\Category' ) );

我希望我可以放心地假设DoctrineModule与composer一起安装,并被添加到application.config.php中的'modules'数组中。

使用此行,否则代码与您的完全相同,点击链接后,或输入URI / application / edit / 1(1是我要编辑的类别的ID),表格显示并且输入字段已正确填充,没有任何错误。

如果仍然有问题,可能是您的类别实体中存在一些错误。