Создание формы с динамическими виджетами - PullRequest
1 голос
/ 17 октября 2011

У меня есть 3 класса: Category, Parameter и Product.

  • Category имеет отношение один ко многим с Parameters.
  • Product имеет отношение один-ко-многим с Category.
  • Parameters - это атрибуты для продукта (цвет, вес, размер, марка и т. Д.).

Когда я выбираю категорию и создаю новый продукт, я хочу создать форму с этими параметрами.Как я могу это сделать?Возможно ли это с помощью Symfony Form Framework?Я надеюсь на вашу помощь.

Я пытаюсь сделать что-то вроде:

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

Конец имеет исключение:

Ожидаемый аргумент типа «Магазин \ ProductBundle \ Entity \ Product», «массив» задан

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

Как только вы установили класс данных в своей форме, единственный объект, который вы можете получить, это его тип.

'data_class' => 'Shop\ProductBundle\Entity\Product'

То, как я добавляю несколько параметров в сущность продукта, - это набор форм.items: Как добавить коллекцию предметов

Или, может быть, вы просто хотите передать такие параметры:

$parameters = $em->getRepository('ShopProductBundle:Product')->getParameters();
$form = $this->createForm(new ProductType(), null, $parameters);

Или, если вы хотите иметь сущность:

$form = $this->createForm(new ProductType(), new Product(), $parameters);
0 голосов
/ 18 октября 2011

Полагаю, вы получаете это исключение, потому что в вашем контроллере $parameters не является продуктом.Вы должны создать новый продукт и добавить к нему параметры.Также, пожалуйста, ознакомьтесь с этой статьей .Это касается проблемы, похожей на вашу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...