我几乎没有需要丑化自定义FormType类的情况。
首先,我需要检查state
的{{1}}是否有效,在这种情况下禁用编辑user
的可能性。但只是添加username
属性并不保护输入不被提交。所以我决定不显示用户名输入字段。我通过传递布尔值来实现它。
控制器:
disabled
然后在UserType类中:
$userForm = $this->createForm(UserType::class, $user, array(
'is_active' => ($user->getState() == 'active')
));
第二种情况是我需要删除if ($options['is_active']) {
$builder
->add('username', EmailType::class);
}
$builder
->add('firstName', TextType::class),
...
约束,并在上传个人资料照片时从NotBlank()
字段添加'required' => false
属性。我通过传递boolean through选项以类似的方式实现了它。
控制器:
FileType
UserType类:
$userForm = $this->createForm(UserType::class, $user, array(
'is_uploaded' => !empty($photo)
));
我的问题是:
答案 0 :(得分:2)
您可以将所有此表单配置的逻辑移动到表单类中。
由于您将$user
实体传递到包含以下内容的表单:
$userForm = $this->createForm(UserType::class, $user, array( // <- $user is passed
'is_uploaded' => !empty($photo)
));
您可以使用{<1}}方法访问它:
builForm
然后你可以验证表单中的所有条件,并且不需要在控制器中弄乱。