Коллекция Symfony

У меня есть объект "produit" с этим отношением:

/**
 * @var \stdClass
 *
 * @ORM\ManyToMany(targetEntity="ListeBundle\Entity\GarDegatEaux", cascade={"persist"})
 * @ORM\JoinTable(name="produit_garDegatEaux",
 *      joinColumns={@ORM\JoinColumn(name="produit_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="garDegatEaux_id", referencedColumnName="id", unique=false)})
 */
private $garDegatEaux;

Тип формы, как показано ниже:

->add('garDegatEaux', CollectionType::class, array('entry_type' => GarDegatEauxType::class,
                                                           'allow_add' => true,
                                                           'allow_delete' => true,
                                                           //'by_reference' => false,
                                                           'prototype' => true,
                                                           'label' => 'Coefficients dégât des eaux',
                                                           'entry_options' => array('label' => 'Coefficients'),
                                                           'attr' => array('class' => 'collection')
                                                        ))

Когда по ссылке установлено значение false, у меня возникает эта ошибка:

Ни свойство "garDegatEaux", ни один из методов "addGarDegatEau()"/"removeGarDegatEau()", "setGarDegatEaux()", "garDegatEaux()", "__set()" или "__call()" не существуют и не являются общедоступными. доступ в классе "DevisBundle\Entity\Produit".

Конечно, в моем объекте addGarDegatEau()"/"removeGarDegatEau()" и получить... существовать и иметь публичный доступ. У меня также есть функция построения с:

$this->garDegatEaux = new \Doctrine\Common\Collections\ArrayCollection();

Когда для параметра "by_reference" установлено значение true, ошибки нет, но для коллекции ничего не отправляется. И когда я сбрасываю форму перед сохранением, в ArrayCollection ничего нет.

И когда "by_reference" прокомментирован, ошибки нет, но ничего не сохраняется и для ArrayCollection.

Мой контроллер:

public function creerProduitAction(Request $request) {

    $produit = new Produit;
    $formProduit = $this->createForm(ProduitType::class, $produit);

    $formProduit->handleRequest($request);

    if ($formProduit->isValid() && $formProduit->isSubmitted()) {



        $em = $this->getDoctrine()->getManager();

        $em->persist($produit);
        $em->flush();
    }

    return $this->render('AdminBundle:Produit:creerProduit.html.twig', array(
        'formProduit' => $formProduit->createView()
    ));
}

Я использовал коллекцию с Symfony 2.7, и этот процесс работал. Я использую Symfony 2.8 атм. Я не понимаю, почему коллекции не сохраняются.


person stax    schedule 16.05.2016    source источник


Ответы (1)


Прежде всего, как говорится в Symfony's Docs:

Точно так же, если вы используете поле CollectionType, в котором базовые данные коллекции являются объектом (например, с ArrayCollection в Doctrine), тогда параметру by_reference должно быть присвоено значение false, если вам нужно, чтобы сумматор и модуль удаления (например, addAuthor() и removeAuthor()) называться.

Это именно ваша ситуация, поэтому by_reference следует установить на false.

А что касается ошибки, которую вы получаете, я почти уверен, что у вас нет необходимых геттеров/сеттеров, хотя вы думаете, что они у вас есть. Пожалуйста, проверьте наличие опечаток в их именах и т.д.

person Jakub Matczak    schedule 16.05.2016
comment
Я изменяю имя переменной garDegatEaux, как это garDegatEau. У меня есть геттеры/сеттеры, запрошенные symfony: addGarDegatEau(\ListeBundle\Entity\GarDegatEaux $garDegatEau), а также remove и get. Ошибки больше нет, но ничего не зафиксировано. У меня есть другая коллекция массивов без проблем с опечатками и та же конфигурация с той же проблемой. - person stax; 16.05.2016