У меня проблема, когда я пытаюсь создать форму с коллекциями.Я объясняю вам, каков мой текущий сценарий.
Я создал два основных объекта: Продукт и Категория .И я также создал для них два типа: ProductType, CategoryType .
У меня есть 3 категории и 1 продукт, и я связал первую пару категорий с продуктом.Итак, с продуктом связаны две категории.
Я хочу создать форму продукта.В этой форме я хочу показать только категории продукта в элементе управления html, чтобы пользователь мог в будущем выполнять операции с этими данными.
Я суммирую вам ключевые моменты.
Мой Продукт класс имеет
class Product
{
...
@EmbedMany(targetDocument="Acme\StoreBundle\Document\Category")
protected $categories;
...
}
В моем ProductType у меня есть:
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('id')
->add('name')
->add('price')
->add('categories', 'document', array(
'class' => 'Acme\StoreBundle\Document\Category',
'choices' => $builder->getData()->getCategories()->toArray(),
'multiple' => 'true',
'property' => 'name'
))
;
}
Я пробовал все и самое точное половинное решение должен был создать category свойство ProductType как документ и выбрать опции через данные привязки, поступающие из контроллера.
Дело в том, что при таком решении идентификаторы элементов управления параметрами - это spl_object_hash , установленный в UnitOfWork класс , а не идентификаторы оригинала Объект категории .
Мои предыдущие попытки:
У меня нет проблем при использовании документов без предыдущего выбора,но я хочу только те категории, которыми владеет Product.
У меня нет проблем, когда я использую collection для отображения списка категорий (связывая CategoryType ), но я нене знаю, как показать это как элемент управления select.
Я не могу использовать query_builder over Класс категории , потому что я могу 'Запросить только объекты имеют идентификатор продукта X, потому что Объект категории не имеет Ссылка продукта (и это правильно).
У кого-нибудь есть решение этой проблемы или другая идея, чтобы решить эту проблему?
Большое спасибо, Рики.