У меня есть форма (AbstractType
), которая сопоставляется с сущностью (доктриной).Как сопоставить поле коллекции форм symfony2 с полем типа массива доктрины?
У этого объекта есть поле, которое имеет вид доктрины array
.
В соответствии с документами symfony должно быть возможно сопоставить поле коллекции форм с array
PHP, но, по-видимому, оно не работает, когда форма сопоставляется с сущностью. Symfony ожидает, что это поле будет отношением, но это всего лишь array
.
Это не фактический код, просто пример:
Рассмотрим это (учение-сохранялось) сущность:
class Article
{
...
/**
* @ORM\Column(type="array")
*/
protected $tags;
...
}
И эта сущность (не удалось доктриной):
class Tag
{
...
public $name;
...
}
И этот вид формы:
class ArticleType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('tags', 'collection', array('type' => new TagType()));
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => '\Entity\Article',
);
}
}
тега типа формы:
class TagType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name', 'text');
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => '\Entity\Tag',
);
}
}
При попытке создать экземпляр доктрины СтатьяВид статьи пожалуется что-то вдоль линий:
Expected argument of type "\Entity\Tag", "array" given
В файле:
поставщика/Symfony/SRC/Symfony/Компонент/Форма/Расширение/Ядро/DataMapper/PropertyPathMapper.php по строке 47
Действительно ли это можно сделать то, что я хочу, не написав свой собственный тип поля?
ОБНОВЛЕНИЕ: Может быть, я должен перефразировать мой вопрос: как мне сказать symfony не отображать это поле ни на что (если я изменю свое имя, symfony жалуется, что у объекта нет такого свойства)?
Это не жизнеспособное решение для меня. Приведенный выше код является лишь примером. В действительности каждая подчиненность немного сложнее, чем одно текстовое поле. – pinkeen