我需要您对CollectionType字段的建议。
我使用以下方法制作了我的收藏类型字段:Symfony CollectionType Field
一切正常。即使使用JQuery动态添加字段也能正常工作。
但是有一个问题。
每次收集字段渲染时,我都无法找到如何添加一个字段。我的页面加载后,我的收集字段为空。但是,我想在每次加载页面后从集合中获取第一个字段。
如何实现这一目标?我应该使用Javascript还是某种形式的活动?任何有关在文档或代码片段中找到正确章节的提示都将非常受欢迎。
答案 0 :(得分:1)
我想我记得这样做了,我最后在第一次加载时创建了一个空子的数据。
我无法对此进行测试,但我认为以下内容应根据您的表单细节而有效。
public function someAction()
{
$data = [];
$data['collection_name'][] = ['text' => ''];
$form = $this->createForm(SomeType::class, $data);
return $this->templating->renderResponse('template.twig.html', [
'form' => $form,
]);
}
将'required' => false,
添加到集合的表单配置中应该可以防止空项持久存在。
您还可以在表单Type class上调查configureOptions方法:
public function configureOptions(OptionsResolver $resolver)
{
$data = [];
$data['collection_name'][] = ['text' => ''];
$resolver->setDefaults(array(
'empty_data' => $data,
));
}
答案 1 :(得分:0)
这种方式对我有用。
// 3 default values for empty form
$configArr = [[], [], []];
if ($builder->getData()) {
$configArr = $builder->getData()->getColumns();
}
$builder->add('columns', CollectionType::class, [
'entry_type' => ColumnType::class,
'prototype' => true,
'allow_add' => true,
'allow_delete' => true,
'data' => $configArr,
'mapped' => false,
]);
答案 2 :(得分:0)
这对我很有效。
public function buildForm(FormBuilderInterface $builder, array $options) {
$data = $builder->getData(); // data passed to the form
$builder->add('textFields', CollectionType::class, [
'entry_type' => TextType::class,
'data' => $data ? $data->getTextFields() : ['']
]);
}