Symfony 2.7.7 - Коллекция форм «Примечание: неопределенный индекс: pageId»

1

Попытка создать форму, в которой он будет представлять собой сборник, но, к сожалению, потерял ее ошибку и не знает, как мы выздоравливаем.

Дает мне ошибку

Примечание. Неопределенный индекс: 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

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Теги:
doctrine2
symfony-forms

1 ответ

1
Лучший ответ

Во-первых, ваши аннотации неверны.

Страница должна быть:

 * @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. Я рекомендую хорошо прочитать документацию по формам, так как вы увидите что-то подобное.

  • 0
    Большое спасибо. У меня все еще есть один вопрос, это уже форма. PageContent состоит из: имя типа контента В форме редактирования должен быть только контент, «имя» является именем «тип» ввода этого типа ввода, таких как «текст» или «текстовое поле». И вот мой вопрос: как ввести эту информацию в форму?
  • 0
    Зачем вам нужно хранить тип контента? Если это происходит во время создания контента, вы можете указать тип поля выбора. Также, если мой оригинальный ответ помог вам, пожалуйста, отметьте его как полезный.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню