Попытка создать форму, в которой он будет представлять собой сборник, но, к сожалению, потерял ее ошибку и не знает, как мы выздоравливаем.
Дает мне ошибку
Примечание. Неопределенный индекс: pageId
500 Внутренняя ошибка сервера - ContextErrorException
Объект страницы:
class Page
{
private $id;
private $name;
/**
* @ORM\OneToMany(targetEntity = "PageContent", mappedBy = "pageId")
*/
private $content;
}
PageContent Entity:
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;
}
EditPageContentsType:
<?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',
));
}
}
PageContentType:
<?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, пожалуйста, не щелкайте негативами. Благодарю.
PS
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.
Во-первых, ваши аннотации неверны.
Страница должна быть:
* @ORM\OneToMany(targetEntity = "PageContent", mappedBy = "page")
PageContent должен быть:
* @ORM\ManyToOne(targetEntity = "Page", inversedBy = "content")
mappedBy и inversedBy напрямую связаны с именами свойств объекта для отношений и должны быть одинаковыми.
Во-вторых, поскольку PageContent является дочерним элементом страницы, вам не нужна pageId в вашем PageContentType. Это лучший способ сделать что-то.
В EditPageContentsType добавьте параметр 'by_reference' => false
узнать, почему
Затем измените свой метод addContent() на странице
public function addContent(PageContent $pageContent)
{
$pageContent->setPage($this);
$this->content->add($pageContent);
}
Как и в примере addTag немного вниз в этом документе
Это позволяет вам легко связывать страницы с объектами PageContent. Я рекомендую хорошо прочитать документацию по формам, так как вы увидите что-то подобное.