使用动态小部件构建表单

时间:2011-10-17 13:09:02

标签: forms symfony

我有3个班级:CategoryParameterProduct

  • CategoryParameters有一对多的关系。
  • ProductCategory有一对多的关系。
  • 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”类型的预期参数,“数组”   给定

2 个答案:

答案 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);