我在编辑实体类别的值时遇到错误。这是我的代码
<a href="<?php echo $this->url('application/default', array('action'=>'edit','id' => $child->getId()));?>">Bearbeiten</a>
在我的IndexController中是操作:
public function editAction()
{
$id = (int) $this->params()->fromRoute('id');
$em = $this->getEntityManager();
$category = $em->getRepository('ApplicationEntityCategory')->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
);
}
这是我的分类表.php:
namespace ApplicationForm;
use ZendFormForm;
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
有人知道我的错误并能帮助我吗?
首先,根据您的问题,只能确定$child->getId()是什么。我假设$child是Category类的一个实例,getId(
<a href="<?php echo $this->url('application/default', array('action'=>'edit','id' => 1));?>">Bearbeiten</a>
为了安全起见,我还将Category的一个实例作为$child变量传递给了index.phtml,将您的代码用于链接,并且链接工作正常(因此url视图助手没有问题)。无论如何,我可以把网址写进浏览器,然后点击输入,但由于我不知道你的错误出现在哪里,(也许是在点击链接后),我必须确保:)
接下来,我准确地复制了你的代码,除了这一行:
$form->setHydrator(new CategoryHydrator());
您没有提供hydrator的代码。我假设你已经创建了它,但如果没有向我展示它,我只能假设hydrator代码中有一个错误。代替那条线,试试:
$form->setHydrator ( new DoctrineModuleStdlibHydratorDoctrineObject ( $em, 'ApplicationEntityCategory' ) );
我希望我可以放心地假设DoctrineModule是用composer安装的,并添加到application.config.hp.中的"模块"数组中
使用这一行,否则代码与您的代码完全相同,单击链接或输入URI/application/edit/1(1是要编辑的类别的id)后,将显示表单,并正确填充输入字段,没有任何错误。
如果仍然有问题,也许您的Category实体中存在一些错误。