我正在搜索如何使用表单构建器实现动态选择语言的系统。
所以我们必须有两个html数组输入字段:name =“languages []”,第二个将是name =“languges_level []”
因此,该系统允许用户设置他可以用他的关卡进行讲话的语言。
用户可以在提交表单之前动态添加/删除语言。
问题:
1-表单级别:字段表单类型是什么?我必须添加2个表单字段,这些字段将被组合以创建我的结果数组,该数组将存储在数据库中。因此,这两个字段不会与ORM映射。
->add('langues', TYPEXXX:class)
->add('langues_level', TYPEXXX:class)
3- Twig等级:我是否应该在树枝上做一些改变?
那么在我的案例中最好的解决方案是什么?
我的第一次尝试是:
->add('languages', CollectionType::class, array(
'entry_type' => ChoiceType::class,
'entry_options' => array(
'choices' => array(
'Français' => 'Français',
'English' => 'English',
'Italien' => 'Italien',
'Espanish' => 'Espanish',
),
'label' => ' ',
),
))
->add('language_levels', CollectionType::class, array(
'entry_type' => ChoiceType::class,
'entry_options' => array(
'choices' => array(
'Beginner' => 'Beginner',
'Medium' => 'Medium',
'Good' => 'Good',
),
'label' => ' ',
),
));
但是这不像我在图片中提到的那样工作..谁有一个完美的解决方案?
答案 0 :(得分:1)
我认为你需要一个Collection of Forms。
所以我们必须有两个html数组输入字段:name =" langues []"和 第二个是name =" langes_level []"
(..)
3- Twig等级:我是否应该在树枝上做一些改变?
(..)
4- Javascript Level,我可以在输入干净时开发它 在html中创建。
不,不,不。描述你的数组输入字段'如果您正在使用像Symfony这样的框架,那么应该准确地命名是不正确的心态。描述您的实体字段,描述您的表单字段,Symfony将为所有表单元素命名。 Symfony Forms将为您呈现和处理表单,因此(很可能)不需要打扰表单元素名称的确切内容。
您的实体类:
class LanguageLevel
{
protected $user;
protected $language;
protected $level;
//getters and setters
}
创建表单类型:
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('languages', CollectionType::class, array(
'entry_type' => LanguageLevelType::class,
'allow_add' => true,
));
}
}
和LanguageLevelType:
class LanguageLevelType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('language', LanguageType::class)
->add('level', ChoiceType::class, array(
'choices' => array(
'Good' => 5,
'Bad' => 1,
),
));
}
}
如果渲染的输出不是您想要的,请检查文档是否可以配置表单类型。手动更改树枝模板,您的控制器和/或特定情况的javascripts是可能的,但我认为'表格集合'从上面将涵盖您的用例。