Forms Symfony:与文本字段的多对多关系
我们与两个实体Forms Symfony:与文本字段的多对多关系,forms,symfony,Forms,Symfony,我们与两个实体产品{properties:name,details}和标记{properties:name}有多对多关系。现在,当用户添加产品时,他必须能够创建标签。所以我试过这个 $builder->add('tags', 'entity', array( 'class' => 'AppBundle:Tag', 'multiple' => true, 'expanded' => true, 'property' => 'name',
产品{properties:name,details}和标记{properties:name}
有多对多关系。现在,当用户添加产品时,他必须能够创建标签。所以我试过这个
$builder->add('tags', 'entity', array(
'class' => 'AppBundle:Tag',
'multiple' => true,
'expanded' => true,
'property' => 'name',
'required' => true
'allow_add' => true ));
不幸的是,这给了我一个标签下拉列表。但我真正想要的是多个文本输入字段,用户可以在其中输入标签的名称,然后在用户保存类别表单时,应该将其保存在数据库中
到目前为止,我找到的所有解决方案都与下拉列表或复选框选项相关。但在我的例子中,数据库中没有标签列表,我希望在用户创建产品时创建标签。那么我该怎么做呢?实体类型字段只能是选择、复选框或单选按钮(取决于展开的选项和多个选项),因此这些选项不适合您 通过实现标记类型并将其作为集合嵌入表单,可以解决多个文本字段的呈现问题 按集合字段更改ProductType:
...
$builder->add('tags', CollectionType::class, array(
'allow_add' => true,
'allow_delete' => true,
'entry_type' => TagType::class,
'entry_options' => array(
...
),
)
...
创建标记类型本身:
class TagType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('tagName', FormType\TextType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Entity\Tag',
)
);
}
}
但是要注意缺点-如果没有为产品分配任何标签,则不会呈现任何字段。基本上有两个选项:1)在呈现表单之前向产品实体添加几个空标记,2)实现某种javascript方法来添加新的标记字段