Symfony 3.4 конфликт между именем поля формы и сущностью с опцией indexBy - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать форму, но кажется, что существует конфликт, вызванный опцией аннотации OneToMany indexBy = "label"

Имя "Exemple frais" содержит недопустимые символы. Имена должны начинаться с буквы, цифры или символа подчеркивания и содержать только буквы, цифры, цифры, символы подчеркивания ("_"), дефисы ("-") и двоеточия (":").

Где«Exemple frais» - это метка моей сущности.

/**
 * User.
 *
 * @ORM\Table(name="user")
 * @ORM\Entity()
 */
class User extends BaseUser
{

    (...)

    /**
     * @var Frais[]
     *
     * @ORM\OneToMany(targetEntity="App\Entity\Frais", mappedBy="user",indexBy="label")
     */
    private $frais;

Здесь мое поле формы:

->add(
            'frais',
            CollectionType::class,
            [
                'entry_type'   => FraisType::class,
                'allow_add'    => true,
                'allow_delete' => true,
                'by_reference' => false,
                'prototype'    => true
            ]
        )

Даже если я установлю следующие функции в FraisType:

 public function getBlockPrefix()
{
    return 'frais';
}

/**
 * {@inheritDoc}
 */
public function getName()
{
    return 'frais';
}

/**
 * {@inheritDoc}
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(
        [
            'data_class' => Frais::class
        ]
    );
}

Единственное решение, которое я нашел, - это изменить мой CollectionType на EntityType. Знаете ли вы какое-нибудь решение, чтобы я не сменил это?

1 Ответ

0 голосов
/ 17 октября 2019

Итак. Я решил использовать опцию поля данных. Это не совсем ответ на мой вопрос, но он работает

            ->add(
                'frais',
                CollectionType::class,
                [
                    'entry_type'   => FraisType::class,
                    'allow_add'    => true,
                    'allow_delete' => true,
                    'by_reference' => false,
                    'prototype'    => true,
                    'data' => $this->em->getRepository(FraisDivers::class)->findBy(['user' => $this->user])
                ]
            )

Этот способ предотвращает получение сущностей Frais по реляционной ссылке и предотвращает путаницу в опции indexOf.

...