我很少有需要对 FormType 类进行丑陋定制的情况。
第一个是我需要检查用户
的状态
是否处于事件状态,在这种情况下禁用编辑用户名
的可能性。但仅仅添加 disabled
属性并不能保护输入不被提交。所以我决定不显示用户名输入字段。我通过选项传递 bool 值来实现它。
Controller :
$userForm = $this->createForm(UserType::class, $user, array(
'is_active' => ($user->getState() == 'active')
));
然后在 UserType 类中:
if ($options['is_active']) {
$builder
->add('username', EmailType::class);
}
$builder
->add('firstName', TextType::class),
...
第二种情况是我需要在配置文件时删除 NotBlank()
约束并从 FileType
字段添加 'required' => false
属性照片已上传。我以类似的方式通过选项传递 bool 值来实现它。
Controller :
$userForm = $this->createForm(UserType::class, $user, array(
'is_uploaded' => !empty($photo)
));
用户类型类:
// achieved same way as previous problem
我的问题是:
- 处理此类案件有哪些建议?
- 我的做法正确且可以接受吗?
- 是否有处理这些案例的文档或示例?
最佳答案
您可以将所有此表单配置的逻辑移至表单类中。
由于您将 $user
实体传递到表单中:
$userForm = $this->createForm(UserType::class, $user, array( // <- $user is passed
'is_uploaded' => !empty($photo)
));
您可以在 builForm
方法中访问它:
$user = $builder->getData();
然后你就可以验证表单内的所有条件,而无需在 Controller 中搞乱。
关于php - Symfony2 - 自定义 FormType 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37854329/