Php Symfony-添加并保留额外字段

Php Symfony-添加并保留额外字段,php,symfony,symfony-forms,Php,Symfony,Symfony Forms,我有一个ChoiceType::Type字段,显示一些选项,我想为每个选项添加一个输入,在上面添加一个价格。我是这样做的: ->add('product_price', ChoiceType::class, array( 'choices' => array( "Product 1", "Product 2", ), ) 为每个选项添加输入的JS: var productBoxes = $("[id^=product_]"); // Li

我有一个ChoiceType::Type字段,显示一些选项,我想为每个选项添加一个输入,在上面添加一个价格。我是这样做的:

->add('product_price', ChoiceType::class, array(
    'choices' => array(
       "Product 1",
       "Product 2",
    ),
)
为每个选项添加输入的JS:

var productBoxes = $("[id^=product_]");
// Listen the checkbox to display or hide the prices inputs
productBoxes.each(function (index) {
    var priceField = '<label class="control-label required" for="product_price_' + index + '">Capacité</label>' +
        '<input type="text" id="product_price_' + index + '"  name="product[price][]" class="form-control">';
    $(this).click(function () {
        if ($(this).is(':checked')) {
            $(this).parent().append(priceField);
        } 
    })
})
var-productbox=$(“[id^=product\”);
//收听复选框以显示或隐藏价格输入
ProductBox.each(函数(索引){
var priceField=‘电容’+
'';
$(此)。单击(函数(){
如果($(this).is(':checked')){
$(this.parent().append(priceField);
} 
})
})
javascript可以工作,它会在每个选项旁边附加字段。现在我想以数组形式发送数据,如下所示: [“产品1”=>“附加字段的值”]

但我不知道如何获取额外的数据并将其保存到数据库中

有人知道怎么做吗

编辑1 我试着用CollectionType做这件事,但没有找到如何将每个CollectionType元素呈现为复选框。有没有办法这样做


谢谢你的帮助

在您的示例中,最简单的方法是在表单中再添加两个字段。用CSS隐藏它们(显示:无),用JS显示它们(取消/选择选项时切换类“隐藏”)


另一种方法是使用嵌套表单,或者动态构建表单,这可能有点过分,也可能没有过分,这取决于您实际执行的操作。在您的示例中,最简单的方法是向表单中再添加两个字段。用CSS隐藏它们(显示:无),用JS显示它们(取消/选择选项时切换类“隐藏”)


另一种方法是使用嵌套表单,或者动态构建表单,这可能有点过分,也可能没有过分,这取决于您实际执行的操作

我认为更好的方法是创建自定义类型并在其中设置附加字段

例如:

您可以选择以下主要表单类型:

$builder->add('product_price', CollectionType::class, array(
    'label' => 'Prices',
    'entry_type'    => ProductPriceType::class
));
和产品价格类型:

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('product', TextType::class, array())
        ->add('price', NumericType::class, array());
}


/**
 * @param OptionsResolver @resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\SomeEntity'
    ));
}
我想你们可以从数据库中获取产品数据。
在本例中,您得到的数组包含两个值-product和price

,我认为更好的方法是创建自定义类型并在其中设置附加字段

例如:

您可以选择以下主要表单类型:

$builder->add('product_price', CollectionType::class, array(
    'label' => 'Prices',
    'entry_type'    => ProductPriceType::class
));
和产品价格类型:

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('product', TextType::class, array())
        ->add('price', NumericType::class, array());
}


/**
 * @param OptionsResolver @resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\SomeEntity'
    ));
}
我想你们可以从数据库中获取产品数据。
在本例中,您得到的数组包含两个值-product和price

也许我错了,但我认为您应该深入研究ChoiceType类

使用基本选择类型时,Symfony docs会说:

选项是一个数组,其中数组键是项的标签,数组值是项的值

如果我正确理解了你的情况,你需要一些非常具体的选择,比如:

$choices = [
     'item_label' => [
           'value' => 'item_value',
           'price' => 'item_price'
     ],
     'item_label2' => [
           'value' => 'item_value2',
           'price' => 'item_price2'
     ],
     ...
]
我无法准确地告诉您要覆盖哪个类,但您最好看一下:

  • 精品工厂类
  • ChoiceList类(ChoiceType使用子类SimpleChoiceList)
  • 选择新的价值标准
我有两个问题:

  • 存储标签和价格的数据模型是什么

  • 这张单子是干什么用的?如果表单组件过于复杂,您可能需要将流程分为两个步骤:

  • 一种用于定义产品价格的表格
  • 一个表格可以选择您感兴趣的产品

    • 也许我错了,但我认为你应该深入到ChoiceType课程中去

      使用基本选择类型时,Symfony docs会说:

      选项是一个数组,其中数组键是项的标签,数组值是项的值

      如果我正确理解了你的情况,你需要一些非常具体的选择,比如:

      $choices = [
           'item_label' => [
                 'value' => 'item_value',
                 'price' => 'item_price'
           ],
           'item_label2' => [
                 'value' => 'item_value2',
                 'price' => 'item_price2'
           ],
           ...
      ]
      
      我无法准确地告诉您要覆盖哪个类,但您最好看一下:

      • 精品工厂类
      • ChoiceList类(ChoiceType使用子类SimpleChoiceList)
      • 选择新的价值标准
      我有两个问题:

      • 存储标签和价格的数据模型是什么

      • 这张单子是干什么用的?如果表单组件过于复杂,您可能需要将流程分为两个步骤:

      • 一种用于定义产品价格的表格
      • 一个表格可以选择您感兴趣的产品

      谢谢您的回答!但这样,我的表中每个产品需要一个字段,每个价格需要一个字段。我不想那样。嵌套表单是一个解决方案,但我真的每个产品有一个复选框,每个复选框有一个字段。。!使用CollectionType可以这样做吗?谢谢您的回答!但这样,我的表中每个产品需要一个字段,每个价格需要一个字段。我不想那样。嵌套表单是一个解决方案,但我真的每个产品有一个复选框,每个复选框有一个字段。。!有可能用CollectionType这样做吗?是的,我试过这样做,但没有找到如何使用1。将CollectionType呈现为复选框。2.将价格输入附加到产品选择上。有办法吗?您可以在ProductPriceType中添加复选框字段。它看起来像每个产品条目的复选框。然后保存已选中checkboxYup的数组项,我试过这样做,但没有找到如何1。将CollectionType呈现为复选框。2.将价格输入附加到产品选择上。有办法吗?您可以在ProductPriceType中添加复选框字段。它看起来像每个产品条目的复选框。然后保存已选中复选框的数组项