2011-10-17 40 views
1

形式我有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; 
    } 

} 

Form類

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

末有例外:

預期類型的​​參數「店\ ProductBundle \實體\產品」,「陣列」 因爲在你的控制器給出

回答

0

我想你得到這個異常$parameters不是一個產品。 你應該建立一個新產品,併爲其添加參數。 也請看看this article。它處理類似於你的問題。

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