Я пытаюсь создать форму с коллекцией сущностей. Вот мой код:
Сущность Colle:
* @ORM\Table(name = "colle")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name = "discr", type = "string")
* @ORM\DiscriminatorMap({"colle" = "Colle","colleQC" = "ColleQC", "colleQR" = "ColleQR"})
*/
class Colle
{
/**
* @var ArrayCollection
* @ORM\OneToMany(targetEntity = "Polycopie", mappedBy = "colle", cascade = {"persist", "remove"})
*/
protected $polycopies;
public function __construct()
{
$this->polycopies = new ArrayCollection();
}
/**
* @return ArrayCollection
*/
public function getPolycopies()
{
return $this->polycopies;
}
/**
* Add Polycopie
*
* @param Polycopie $polycopie
* @return Colle
*/
public function addPolycopie(Polycopie $polycopie)
{
$this->polycopies[] = $polycopie;
return $this;
}
/**
* Remove Polycopie
*
* @param Polycopie $polycopie
*/
public function removePolycopie(Polycopie $polycopie)
{
$this->polycopies->removeElement($polycopie);
}
}
Компания Polycopie:
class Polycopie
{
/**
* @ORM\ManyToOne(targetEntity = "Colle", inversedBy = "polycopies", cascade = {"persist"})
* @ORM\JoinColumn(name = "id_colle", referencedColumnName = "id")
*/
protected $colle;
public function getColle(): ?Colle
{
return $this->colle;
}
public function setColle(Colle $colle): self
{
$this->colle = $colle;
return $this;
}
}
Форма :
class MiseEnLigneFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('polycopies', CollectionType::class,
['label' => false,
'label_attr' => ['class' => 'active'],
'entry_type' => PolycopieFormType::class,
'entry_options' => [
'data_class' => Polycopie::class],
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['data_class' => Colle::class]);
}
}
PolycopieForm:
class PolycopieFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('nom', TextType::class, ['label' =>'Nom',
'label_attr' => ['class'=>'active']]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['data_class' => Polycopie::class]);
}
}
Я все время получаю эту ошибку:
Could not determine access type for property "polycopies" in class "App\Entity\ColleQC"
Я попытался очистить кеш, но ничего не вышло.
Я провел небольшое исследование, и это должно быть связано с тем, что чего-то не хватает, например, геттера или сеттера, но я не могу найти то, что отсутствует в моем коде.
В вашем классе Colle нет конструктора.
ColleQC является дочерней сущностью объекта Colle, но я не знаю, почему он смотрит на ColleQC, тогда как я использовал объект Colle в своем коде. У меня в коде есть конструктор. Я только что добавил это выше.
Одна из проблем заключается в том, что методы добавления и удаления кажутся не относящимися к самому классу Colle.
Это ошибка копирования. В моем коде они находятся в классе Colle
Вставьте, пожалуйста, обе формы целиком.
Я добавил PolycopieForm
Почему в вашем MiseEnLigneFormType определен параметр entry_options? Он вам не понадобится.
Я удалил его, и это не имеет значения.
Решением было добавить сеттер для сущности Polycopie в Colle.






ColleQC? Что это?