У меня есть 4 сущности: Product
, ProductFeatures
, Goods
, GoodsFeaturesValue
и отношения между ними.Я добавляю немного Features
для Product
, а затем хочу создать форму со статическими полями Goods + несколько новых Features
из Product
для этого Goods
.Значения для каждого Goods
сохраняются в GoodsFeaturesValue
.
Как построить эту форму "symfony way"?
ОБНОВЛЕНО
Я использую коллекцию для других Features
, и это прекрасно работает, но как я могу установить меткуProductFeatures
отношение для каждого значения?Я могу сделать это, когда рендер храмовник, но это плохо:)?
//GoodsFormType class
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('name')
//other property...
->add('values', 'collection', array(
'required' => true,
'type' => new GoodsFeaturesValueFormType(),
'allow_add' => false,
'allow_delete' => false,
'by_reference' => false,
))
;
}
//GoodsFeaturesValueFormType
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('value', 'text')
;
}
//controller
public function saveAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$product = $em->getRepository('ShopCoreBundle:Product')->find($id);
if (!$product)
throw $this->createNotFoundException(sprintf('Product with id %s not found', $id));
$features = $em->getRepository('ShopCoreBundle:ProductFeatures')->findByProduct($id);
$goods = new Goods();
$goods->setProduct($product);
foreach ($features as $feature) {
$entity = new GoodsFeaturesValue();
$entity->setFeatures($feature);
$entity->setGoods($goods);
$entity->setProduct($product);
$goods->addGoodsFeaturesValue($entity);
}
$request = $this->getRequest();
$form = $this->createForm(new GoodsFormType(), $goods);
$form->bindRequest($request);
if ($form->isValid()) {
$em->persist($goods);
$em->flush();
return $this->redirect($this->generateUrl('core_product_index'));
}
return array(
'form' => $form->createView(),
'goods' => $goods,
'product' => $product,
'features' => $features,
);
}