正如我在标题中所说,想象我有一个实体用户,我想为这个实体创建多个表单。
例如,这是我的班级用户:
class User
{
protected $firstname;
protected $lastname;
protected $sex;
protected $birthdate
protected $phone;
protected $email;
protected $password;
}
现在我想为这个实体创建多个表单:
我找到了这个解决方案,我想知道这是否是最好的做法:
在我的“FormType”中,我配置了这样的选项:
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\User',
'fields' => false,
));
}
然后我为我想要的每个字段创建一个循环:
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
if($options['fields']){
foreach($options['fields'] as $field){
$builder->add($field);
}
} else {
// Every field I want
}
}
在我的控制器中,我可以像这样使用它:
$form = $this->createForm(UserType::class,$user,['fields' => ['email','password', 'other...']);
同样的想法,我也许可以为我的不同形式命名,如果我不在我的“选项”中写一个名字,我会创建“注册”表单,如果我写“connexion”我构建“ Connexion“表格等
你有更好的解决方案,或者这是最好的方法吗?
(我知道你可以用FOSUserBundle来做,但我选择“用户”作为例子)
答案 0 :(得分:1)
你可以像你写的那样去做。
但我认为更好的解决方案是编写专门的PHP表单类。 比你写的类型要多。但是在Symfony中使用Type word调用表单类:
RegisterType(询问每个字段)
ConnectionType(询问电子邮件+密码)
ForgetPasswordType(询问电子邮件)
这里有最佳实践和Symfony的更多提示(第一段是关于表单): http://symfony.com/doc/2.8/best_practices/forms.html