在 Symfony 3 中有条件地显示表单域

Conditionally display form field in Symfony 3

我有一个帐户(如公司帐户)实体,其中包含 accountOwner 的用户关联。

帐户所有者和 ROLE_ADMIN 的用户都可以编辑帐户,但只有 ROLE_ADMIN 的用户可以设置帐户所有者。

我需要 2 种表单类型吗?或者我可以根据用户角色有条件地在同一表单上显示 accountOwner 字段吗?

您可以有条件地呈现 accountOwner 关联。 当你想动态修改表单时,你通常会想使用 form events.

但是,由于您的表单字段不依赖于绑定到表单的实际数据,而是依赖于安全上下文,您可以将授权检查程序注入您的表单类型并检查是否您要添加所需的字段:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('always_present_field');
    $builder->add('another_always_present_field');

    if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) {
        $builder->add('conditional_field_if_current_user_is_admin');
    }
}