Symfony2 - 自定义FormType类

时间:2016-06-16 08:53:09

标签: php forms symfony formbuilder

我几乎没有需要丑化自定义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)
));

我的问题是:

  • 有哪些建议会处理这类案件?
  • 我所做的是正确和可接受的吗?
  • 是否有处理这些案件的文件或示例?

1 个答案:

答案 0 :(得分:2)

您可以将所有此表单配置的逻辑移动到表单类中。

由于您将$user实体传递到包含以下内容的表单:

$userForm = $this->createForm(UserType::class, $user, array( // <- $user is passed
    'is_uploaded' => !empty($photo)
));

您可以使用{<1}}方法访问它:

builForm

然后你可以验证表单中的所有条件,并且不需要在控制器中弄乱。