У меня есть три разных лица
— Новостная рассылка
— NewsletterOptions
— Опции
Мне нужна сущность NewsletterOptions, потому что мне нужны дополнительные свойства в этой сущности, поэтому отношение manyToMany не является опцией. Теперь я хотел бы создать следующую форму:
Поэтому я создал следующие FormTypes:
<?php
class NewsletterType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('newsletterOptions', 'collection', array(
'type' => new NewsletterOptionsType()
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Application\Bundle\Entity\Newsletter'
));
}
}
class NewsletterOptionsType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('option', 'entity', array(
'property' => 'name',
'class' => 'Bundle:Options',
'multiple' => true,
'expanded' => true
));
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Application\Bundle\Entity\NewsletterOptions'
));
}
}
Указаны следующие объекты:
Application\Bundle\Entity\Newsletter:
type: entity
id:
id:
type: smallint
id: true
generator:
strategy: AUTO
options:
unsigned: true
fields:
name:
type: string
length: 255
oneToMany:
newsletterOptions:
targetEntity: NewsletterOptions
mappedBy: newsletter
Application\Bundle\Entity\NewsletterOptions:
type: entity
id:
id:
type: smallint
id: true
generator:
strategy: AUTO
options:
usigned: true
manyToOne:
newsletter:
targetEntity: Newsletter
option:
targetEntity: Options
mappedBy: newsletterOptions
Application\Bundle\Entity\Options:
type: entity
id:
id:
type: smallint
id: true
generator:
strategy: AUTO
options:
usigned: true
fields:
name:
type: string
length: 255
regex:
type: string
length: 255
oneToMany:
newsletterOptions:
targetEntity: NewsletterOptions
mappedBy: option
Когда я пытаюсь запустить скрипт, это приводит к следующей ошибке. Установка data_class не помогает. Как это можно решить?
The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class Application\Bundle\Entity\NewsletterOptions. You can avoid this error by setting the "data_class" option to "Application\Bundle\Entity\NewsletterOptions" or by adding a view transformer that transforms an instance of class Application\Bundle\Entity\NewsletterOptions to scalar, array or an instance of \ArrayAccess.
Должно быть:
$builder->add('option', 'entity', array(
(Обратите внимание, option
не options
так как так называется ваше поле)
Других решений пока нет …