Symfony 2.7.7 - 表单集合 "Notice: Undefined index: pageId"
Symfony 2.7.7 - Form Collection "Notice: Undefined index: pageId"
试图生成一个表格,其中它将是一个内容的集合,但不幸的是,她的错误让我们失去了,不知道我们如何恢复。
给我错误
Notice: Undefined index: pageId
500 Internal Server Error - ContextErrorException
页面实体:
class Page
{
private $id;
private $name;
/**
* @ORM\OneToMany(targetEntity = "PageContent", mappedBy = "pageId")
*/
private $content;
}
页面内容实体:
class PageContent
{
private $id;
/**
* @ORM\ManyToOne(targetEntity = "Page", inversedBy = "page_content")
* @ORM\JoinColumn(name = "page_id", referencedColumnName = "id", onDelete = "SET NULL")
*/
private $page;
private $name;
}
编辑页面内容类型:
<?php
namespace Eteam\SettingsBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class EditPageContentsType extends AbstractType
{
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'EditPageContents';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('pageContentMap')
->add('content', 'collection', array(
'type' => new PageContentType(),
'options' => array(
'required' => false
),
'allow_add' => true
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Eteam\PageBundle\Entity\Page',
));
}
}
页面内容类型:
<?php
namespace Eteam\SettingsBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PageContentType extends AbstractType
{
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'pageContent';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array(
'label' => 'Test'
))
->add('content')
->add('type')
->add('pageId');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Eteam\PageBundle\Entity\PageContent',
));
}
}
我会很感激你的帮助。
正因为如此,我是这里和 Synfony 2 的初学者,请不要点击否定。谢谢。
P.S.
如果您需要更多信息,请告诉我。
首先你的注释是错误的。
页面应该是:
* @ORM\OneToMany(targetEntity = "PageContent", mappedBy = "page")
PageContent 应该是:
* @ORM\ManyToOne(targetEntity = "Page", inversedBy = "content")
mappedBy 和 inversedBy by 与关系对象的 属性 名称直接相关,并且必须相同。
其次,由于 PageContent 是 Page 的子项,因此您的 PageContentType 中不需要 pageId。这是一种更好的做事方式。
在 EditPageContentsType 中,添加选项 'by_reference' => false
see here for why
然后更改页面中的 addContent() 方法
public function addContent(PageContent $pageContent)
{
$pageContent->setPage($this);
$this->content->add($pageContent);
}
与 addTag 示例有点类似in this document
这使您可以轻松地将 Page 与 PageContent 实体相关联。我建议您好好阅读 forms documentation,因为您会经常看到此类内容。
试图生成一个表格,其中它将是一个内容的集合,但不幸的是,她的错误让我们失去了,不知道我们如何恢复。
给我错误
Notice: Undefined index: pageId
500 Internal Server Error - ContextErrorException
页面实体:
class Page
{
private $id;
private $name;
/**
* @ORM\OneToMany(targetEntity = "PageContent", mappedBy = "pageId")
*/
private $content;
}
页面内容实体:
class PageContent
{
private $id;
/**
* @ORM\ManyToOne(targetEntity = "Page", inversedBy = "page_content")
* @ORM\JoinColumn(name = "page_id", referencedColumnName = "id", onDelete = "SET NULL")
*/
private $page;
private $name;
}
编辑页面内容类型:
<?php
namespace Eteam\SettingsBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class EditPageContentsType extends AbstractType
{
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'EditPageContents';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('pageContentMap')
->add('content', 'collection', array(
'type' => new PageContentType(),
'options' => array(
'required' => false
),
'allow_add' => true
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Eteam\PageBundle\Entity\Page',
));
}
}
页面内容类型:
<?php
namespace Eteam\SettingsBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PageContentType extends AbstractType
{
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'pageContent';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array(
'label' => 'Test'
))
->add('content')
->add('type')
->add('pageId');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Eteam\PageBundle\Entity\PageContent',
));
}
}
我会很感激你的帮助。
正因为如此,我是这里和 Synfony 2 的初学者,请不要点击否定。谢谢。
P.S.
如果您需要更多信息,请告诉我。
首先你的注释是错误的。
页面应该是:
* @ORM\OneToMany(targetEntity = "PageContent", mappedBy = "page")
PageContent 应该是:
* @ORM\ManyToOne(targetEntity = "Page", inversedBy = "content")
mappedBy 和 inversedBy by 与关系对象的 属性 名称直接相关,并且必须相同。
其次,由于 PageContent 是 Page 的子项,因此您的 PageContentType 中不需要 pageId。这是一种更好的做事方式。
在 EditPageContentsType 中,添加选项 'by_reference' => false
see here for why
然后更改页面中的 addContent() 方法
public function addContent(PageContent $pageContent)
{
$pageContent->setPage($this);
$this->content->add($pageContent);
}
与 addTag 示例有点类似in this document
这使您可以轻松地将 Page 与 PageContent 实体相关联。我建议您好好阅读 forms documentation,因为您会经常看到此类内容。