我有一个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);
}
})
})
javascript工作,它会在每个选项旁边添加字段。现在我想将数据发送到数组中,如下所示: [&#34;产品1&#34; =&GT; &#34;附加字段的值&#34;]
但我不知道如何获取额外数据并将其保存到数据库中。
有人知道怎么做吗?
编辑1 我试图用CollectionType来做,但是没有找到如何将每个CollectionType元素渲染为复选框。有没有办法这样做?
感谢您的帮助!
答案 0 :(得分:1)
在您的示例中,最简单的方法是向表单添加两个字段。用CSS隐藏它们(显示:无),然后用JS显示它们(当选择取消/选择时,切换类“隐藏”)
->add('product_one_price', NumberType::class, array(
'attr' => array('class' => 'hidden')
))
->add('product_two_price', NumberType::class, array(
'attr' => array('class' => 'hidden')
))
另一种方法是拥有嵌套表单,或者动态构建表单,这可能会或可能不会过度,具体取决于你实际在做什么
答案 1 :(得分:1)
我认为更好的方法是创建自定义类型并在那里设置其他字段。
例如:
您的主要表单类型:
$builder->add('product_price', CollectionType::class, array(
'label' => 'Prices',
'entry_type' => ProductPriceType::class
));
和ProductPriceType:
/**
* @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'
));
}
我认为你从基地获得产品数据。 在这种情况下,您将获得包含2个值的数组 - 产品和价格
答案 2 :(得分:0)
也许我错了,但我认为你应该深入研究ChoiceType类。
使用基本的ChoiceType时,Symfony文档说:
choices选项是一个数组,其中数组键是项的标签,数组值是项的值
如果我正确理解你的情况,你需要一些非常具体的东西,比如这种选择:
ggplot(data=dat, aes(x=group, y=value, fill=factor(day))) +
geom_bar(stat="identity", position="identity")+
geom_text(label =round(value,0),color = "black")+
scale_y_continuous(breaks=c(-80,-40,0))
我无法确切地告诉你要覆盖哪个课程,但最好的选择是看看:
我有两个问题:
存储标签和价格的数据模型是什么?
这个清单是什么?如果你挖掘表单组件太复杂了,也许你应该分两步拆分你的过程: