Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用ajax的Symfony动态表单_Php_Ajax_Symfony - Fatal编程技术网

Php 使用ajax的Symfony动态表单

Php 使用ajax的Symfony动态表单,php,ajax,symfony,Php,Ajax,Symfony,我正在尝试做一个表格,我将能够添加尽可能多的产品选项,因为我想(所以收集原型)。为此,我需要两个字段,一个是选项定义,第二个是选项值 我有这样的实体:产品、选项、选项定义和产品选项联接(我决定使用两个manytone而不是一个manytomy,因此在产品定义联接中,我得到了manytomy到选项和manytomy到产品) 在向产品添加选项时,我希望首先选择选项定义,然后使用选项更新选择框。这一切正常,但问题是,当我想编辑产品时,它会显示默认选项定义。例如,当我创建产品时,我添加了带有选项定义大小

我正在尝试做一个表格,我将能够添加尽可能多的产品选项,因为我想(所以收集原型)。为此,我需要两个字段,一个是选项定义,第二个是选项值

我有这样的实体:产品、选项、选项定义和产品选项联接(我决定使用两个manytone而不是一个manytomy,因此在产品定义联接中,我得到了manytomy到选项和manytomy到产品)

在向产品添加选项时,我希望首先选择选项定义,然后使用选项更新选择框。这一切正常,但问题是,当我想编辑产品时,它会显示默认选项定义。例如,当我创建产品时,我添加了带有选项定义大小的产品,大小的值为40。当我要编辑产品时,我得到了选项定义颜色和尺寸40

以下是我的意思:

第二排应该是尺寸而不是颜色

在这里,您还可以看到我是如何连接表的:

产品选项类型类

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $factory = $builder->getFormFactory();

    $builder
        ->add('optiondefinitions', 'entity', array(
                                'mapped' => false,
                                'class' => 'ePOS\ProductsBundle\Entity\OptionsDefinitions',
                                'query_builder' => function ($repository) { return $repository->createQueryBuilder('p')->orderBy('p.name', 'ASC'); },
                                'property' => 'name',
                                'attr' => array('class' => 'option-definitions'))) 
        ;

    $refreshOptions = function ($form, $option) use ($factory) {
        $form->add($factory->createNamed('options', 'entity', null, array(
            'class'         => 'ePOS\ProductsBundle\Entity\Options',
            'property'      => 'value',
            'label'         => false,
            'auto_initialize' => false,
            'query_builder' => function ($repository) use ($option) {
                                   $qb = $repository->createQueryBuilder('options')
                                                    ->innerJoin('options.optionDefinition', 'optionDefinitions');

                                   if($option instanceof OptionsDefinitions) {
                                       $qb = $qb->where('options.optionDefinition = :optiondefinitions')
                                                ->setParameter('optiondefinitions', $option);
                                   } elseif(is_numeric($option)) {
                                       $qb = $qb->where('options.id = :option_id')
                                                ->setParameter('option_id', $option);
                                   } else {
                                       $qb = $qb->where('options.optionDefinition = 1');
                                   }
                                   return $qb;
                               }
             )));
    };

    $builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) use ($refreshOptions, $factory) {
        $data = $event->getData();
        $form = $event->getForm();
        if (null === $data) {
            return ;
        }

        $refreshOptions($form, $data->getOptions()->getOptionDefinition());
    });

    $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($refreshOptions) {
        $form = $event->getForm();
        $data = $event->getData();

        if($data == null)
           $refreshOptions($form, null); //As of beta2, when a form is created setData(null) is called first

        if($data instanceof Location) {
            $refreshOptions($form, $data->getOptions()->getOptionDefinition());
            }
    });

    $builder->addEventListener(FormEvents::PRE_BIND, function (DataEvent $event) use ($refreshOptions) {
        $form = $event->getForm();
        $data = $event->getData();

        if(array_key_exists('optiondefinitions', $data)) {
            $refreshOptions($form, $data['optiondefinitions']);
        }
    });
}
ePOS\ProductsBundle\Entity\OptionsDefinitions
中是否有一个uu toString()函数?是的,我添加了u toString(),它返回选项定义的名称。