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