Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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 Symfony-一个实体属性的多个字段_Php_Symfony_Symfony Forms_Symfony 3.2 - Fatal编程技术网

Php Symfony-一个实体属性的多个字段

Php Symfony-一个实体属性的多个字段,php,symfony,symfony-forms,symfony-3.2,Php,Symfony,Symfony Forms,Symfony 3.2,对于一个实体属性,我有三个选择字段。如下图所示。 是否有方法检测所选字段中使用的字段;然后获取其值并将其映射到相应的属性 是否可以将参数发送到表单类型(在本例中TestType,请参见下文)。我试图使它通用,并可重复使用的其他属性 这是我到目前为止的情况 MyForm.php <?php namespace MyBundle\Form; use MyBundle\Form\Type\TestType; use ..etc class MyForm extends AbstractT

对于一个实体属性,我有三个选择字段。如下图所示。

是否有方法检测所选字段中使用的字段;然后获取其值并将其映射到相应的属性

是否可以将参数发送到表单类型(在本例中
TestType
,请参见下文)。我试图使它通用,并可重复使用的其他属性

这是我到目前为止的情况

MyForm.php

<?php

namespace MyBundle\Form;

use MyBundle\Form\Type\TestType;
use ..etc

class MyForm extends AbstractType
{

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

        $builder
            ->add('title',      TextType::class)
            ->add('D1',         TestType::class);

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'MyBundle\Entity\Project'
        ));
    }


    public function getBlockPrefix()
    {
        return 'mybundle_project';
    }


}
<?php

namespace MyBundle\Form\Type;

use Sonata\AdminBundle\Form\Type\Filter\ChoiceType;
use ..etc

class TestType extends AbstractType
{
    /*
     * private $myArray1;
     * private $myArray2;
     * private $myArray3; numberOfSeletcs
     * private $numberOfSeletcs;        
    Secondary Question: Is it possible to send these values as parameters?

    public function __construct($array1, $array2, $array3, $n)
    {
        $this->myArray1= $array1;
        $this->myArray2= $array2;
        $this->myArray3= $array3;
        $this->numberOfSeletcs= $n;

    }


    */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $myArray1 = array('label1'=>'','Value1'=>'Value1', 'Value2'=>'Value2','Value3'=>'Value3');
        $myArray2 = array('label2'=>'', 'Value4'=>'Value4','Value5'=>'Value5');
        $myArray3 = array('label3'=>'', 'Value6'=>'Value6','Value6'=>'Value6');

        $builder
            // ...
            ->add('H1', 'choice',  array(
                'choices' => $myArray1,
                'choice_attr' => ['label1' => ['disabled selected hidden'=>'']]))
            ->add('H2', 'choice',  array(
                'choices' => $myArray2,
                'choice_attr' => ['label2' => ['disabled selected hidden'=>'']]))
            ->add('H3', 'choice',  array(
                'choices' => $myArray3,
                'choice_attr' => ['label3' => ['disabled selected hidden'=>'']]));
    }


}

要检测使用了哪些选择字段,必须使用Javascript。正如您所知,Symfony是一个在服务器端工作的PHP框架,需要在客户端javascript上检测事件。对于表单类型的pass参数,您的答案如下

谢谢,答案的第二部分帮助您找到了解决方案。这就是对我有效的方法:我现在将开始处理你的第一个建议。这就是我所做的:我通过实现一个jquery脚本,将更改select的同级返回为null(标签值),成功地检测到使用了哪些select字段。然后,找出哪个不是空的。但是,我在数据转换器中发现了问题。