【发布时间】:2014-11-30 09:31:00
【问题描述】:
如果实体字段之前有值,则在将实体字段编辑为 NULL 时出现错误。第一次持久化到数据库,我可以用 NULL 值提交它。将值更改回 NULL 时发生此错误:
可捕获的致命错误:参数 1 传递给 Sifo\SharedBundle\Entity\BlogMenu::setBlogPage() 必须是一个实例 Sifo\SharedBundle\Entity\BlogPage,给定 null,调用 C:\Sifony\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php 在第 438 行并在 C:\Sifony\src\Sifo\SharedBundle\Entity\BlogMenu.php 第 332 行
这是我的实体 BlogMenu.php 第 332 行:
// ...
* Set blogPage
*
* @param \Sifo\SharedBundle\Entity\BlogPage $blogPage
* @return blogPage
*/
public function setBlogPage(\Sifo\SharedBundle\Entity\BlogPage $blogPage) // Line 332
{
$this->blogPage = $blogPage;
return $this;
}
/**
* Get blogPage
*
* @return \Sifo\SharedBundle\Entity\BlogPage
*/
public function getBlogPage()
{
return $this->blogPage;
}
// ...
我的控制器中的updateAction是这样的:
/**
* Edits an existing BlogMenu entity.
*
*/
public function updateAction(Request $request, $id)
{
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('SifoSharedBundle:BlogMenu')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find BlogMenu entity.');
}
$entity->setOperator($user->getName());
$form = $this->createEditForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em->flush();
return $this->redirect($this->generateUrl('admin_blog_menu_show', array('id' => $id)));
}
return $this->render('SifoAdminBundle:edit:layout.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
'user' => $user,
));
}
这是我的表单类型:
<?php
// ...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('blog_page', 'entity', array(
'required' => false,
'empty_value' => 'admin.choice.choosePage',
'class' => 'Sifo\SharedBundle\Entity\BlogPage'))
// ...
【问题讨论】: