我有3个班级:Category
,Parameter
和Product
。
Category
与Parameters
有一对多的关系。Product
与Category
有一对多的关系。Parameters
是产品的属性(颜色,重量,大小,
品牌等。)。当我选择一个类别并创建一个新产品时,我想创建一个包含这些参数的表单。 我怎样才能做到这一点?是否可以使用symfony表单框架? 我希望得到你的帮助。
我尝试这样做:
class ProductRepository extends EntityRepository
{
public function getParameters()
{
$em = $this->getEntityManager();
$parameters = $em->getRepository('ShopProductBundle:CatParameter')->findAll();
$data = array();
foreach ($parameters as $k => $value) {
$name = $value->getId();
$data[$name] = array("label" => $value->getName());
}
return $data;
}
}
表格类
class ProductType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name', 'text', array('label' => 'Name'));
$data = $options['data'];
foreach($data as $k => $item){
$builder->add((string)$k, 'text', array('label' => $item['label']));
}
}
public function getName()
{
return 'shop_productbundle_categorytype';
}
public function getDefaultOptions(array $options){
return array('data_class' => 'Shop\ProductBundle\Entity\Product');
}
}
创建表单:
$parameters = $em->getRepository('ShopProductBundle:Product')->getParameters();
$form = $this->createForm(new ProductType(), $parameters);
结束有异常:
“Shop \ ProductBundle \ Entity \ Product”类型的预期参数,“数组” 给定
答案 0 :(得分:0)
我猜你得到了这个例外,因为你的控制器$parameters
不是产品。
您应该构建一个新产品,并将参数添加到它。
另请查看this article。它处理类似于你的问题。
答案 1 :(得分:0)
只要在表单中设置了数据类,就可以获得唯一的对象类型。
'data_class' => 'Shop\ProductBundle\Entity\Product'
我将多个参数添加到产品实体的方式是表单项的集合: How to add collection of items
或许您只想传递这样的参数:
$parameters = $em->getRepository('ShopProductBundle:Product')->getParameters();
$form = $this->createForm(new ProductType(), null, $parameters);
或者,如果您想拥有一个实体:
$form = $this->createForm(new ProductType(), new Product(), $parameters);