0

假设在我的系统中有几个用户角色:ROLE_ADMIN、ROLE_MODERATOR、ROLE_CUSTOMER_PERSON、ROLE_CUSOMER_COMPANY

在注册表单中,我想让用户选择他想要拥有的角色(在 ROLE_CUSTOMER_PERSON 和 ROLE_CUSOMER_COMPANY 之间)。

所以我choice在我的表单类中添加了一个类型字段,值为 1 和 2。我可以添加一个约束来检查恶意用户是否没有选择其他任何一个,这没关系。但是现在我必须以某种方式将这些 1 和 2 转换为 ROLE_CUSTOMER_PERSON 和 ROLE_CUSOMER_COMPANY 并使用 addRole 方法来分配它们,否则 isValid 表单函数将在 $roles 数组属性上失败。

那么有没有一种方法可以让我在第一次验证(如果是 1 或 2)和表单的 isValid 方法后自动“翻译”东西?

我知道我可以只使用 Request 对象,手动验证它,然后在实体中设置它,然后验证表单的其余部分,但这很讨厌,每次我想使用表单时都必须这样做。

有任何想法吗?谢谢。

4

3 回答 3

0

You're looking for a DataTransformer.

Otherwise you could use a listener/subscriber to convert your form data when one of symfony's form events occurs.

于 2013-06-25T11:44:56.420 回答
0

你不能直接在选择字段中传递值吗?

$builder->add('role', 'choice', ['choices' => [ 'ROLE_CUSTOMER_PERSON' ] ]);

当表单绑定时,它将在数据对象上调用此方法:

$user->setRole('ROLE_CUSTOMER_PERSON'); // or addRole

您还可以想象该addRole方法足够聪明,可以将 1 和 2 值转换为正确的字符串。

于 2013-06-25T11:39:12.263 回答
0

也许你应该添加一个自定义表单类型,比如 RoleType smtg?

您可以在此处的文档中查看如何执行此操作

于 2013-06-25T09:46:14.733 回答