通过symfony2中的唯一键验证实体的最佳方法

时间:2012-11-03 18:22:10

标签: symfony symfony-forms

我正在尝试构建一个表单,收集有关游戏中新玩家的信息。

要开始游戏,需要提供昵称,电子邮件和代码。

代码存储在与播放器表连接的另一个表中,具有一对一的关系

验证期间我需要做的是检查提供的令牌是否存在,如果存在代码记录中 Player id。

要做到这一点,我正在尝试构建一个表单:

class PlayerType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('code','text')
        ->add('email', 'email') 
        ->add('nick', 'text')
    ;
}
...
}

但是在验证期间(或者可能在创建代码实例期间)以这种方式

Argument 1 passed to Player::setCode() must be an instance of Code, string given

这很明显,因为已经提供了字符串。

如何在表单验证期间执行查找并且不传递令牌字符串而是传递令牌实例?

1 个答案:

答案 0 :(得分:2)

查看data transformers。这将允许您创建一个带有标量类型字段的表单,该表单在表单提交时填充模型时会转换为实体。

关于验证,您需要创建一个custom validation constraint来检查数据库中是否存在给定的代码。