我在编辑实体类别的值时遇到错误。这是我的代码
<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
有人知道我的错误并且可以帮助我吗?
答案 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),表格显示并且输入字段已正确填充,没有任何错误。
如果仍然有问题,可能是您的类别实体中存在一些错误。