如果此字段之前具有值,则在将Entity字段编辑为NULL时出错。对于第一次持久化到数据库,我可以提交NULL值。将值更改回NULL时发生此错误:
捕获致命错误:参数1传递给 Sifo \ SharedBundle \ Entity \ BlogMenu :: setBlogPage()必须是一个实例 Sifo \ SharedBundle \ Entity \ BlogPage,null给定,调用 C:\ Sifony \厂商\ symfony的\ symfony的\ SRC \的Symfony \元器件\ 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,
));
}
这是我的FormType:
<?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'))
// ...
答案 0 :(得分:2)
将您的代码修改为此
public function setBlogPage(\Sifo\SharedBundle\Entity\BlogPage $blogPage = null)
{
$this->blogPage = $blogPage;
return $this;
}
正如我在评论中告诉你的那样,这归因于type hinting。类型提示用于检查传递给函数的参数的类型(类;不是基本类型,可以检查this answer)。如果您想让您的函数接受null
类型,则应指定它。
最好使用类型提示,因为它更安全&#34;并且不会导致&#34;副作用&#34; (如果可能的话)。让我们考虑第三方库或供应商:如果您使用第三方库中的函数,您应该知道参数类型,如果您尝试传递错误的类型,那么&#34;编译器&#34; (解析器)会通知你。
答案 1 :(得分:0)
我不确定这是否是解决此问题的好方法。我在我的实体中删除了变量声明作为实体。
* Set blogPage
*
* @param \Sifo\SharedBundle\Entity\BlogPage $blogPage
* @return blogPage
*/
public function setBlogPage($blogPage) // Line 332
{
$this->blogPage = $blogPage;
return $this;
}
答案 2 :(得分:0)
在我的情况下,问题出在php.ini
max_input_vars
变量中。默认情况下是1000
,但我发送了3k +
这两个想法都是不好的:允许为null并删除声明