php - Symfony2 - 自定义 FormType 类

标签 php forms symfony formbuilder

我很少有需要对 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/

相关文章:

php - 插入时获取youtube视频的ID作为回调

javascript - 多个变量

在 firefox 的检查器中查看时覆盖整个表单的 HTML div 元素

Javascript 表单验证服务器端,可能吗?

apache - 在没有 mod_deflate 的情况下在 Symfony 2 中使用 gzip/compression

symfony - 使用多个实体管理器解析目标实体

php - 使 Doctrine 的 UniqueEntity 约束不区分大小写

php - 有没有更好的方法来设计这个 PHP 函数?

php - 试图追踪 apache 日志中的模糊错误

用于下载名称中包含 utf-8 字符的文件的 PHP 脚本