Php Symfony-添加并保留额外字段
我有一个ChoiceType::Type字段,显示一些选项,我想为每个选项添加一个输入,在上面添加一个价格。我是这样做的: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
->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)
- 选择新的价值标准
- 存储标签和价格的数据模型是什么
- 这张单子是干什么用的?如果表单组件过于复杂,您可能需要将流程分为两个步骤:
- 一种用于定义产品价格的表格
- 一个表格可以选择您感兴趣的产品