FOSUserBundle控制器中的唯一验证器

时间:2012-04-10 17:05:19

标签: symfony fosuserbundle

我正在尝试在控制器中使用FOSUserBundle Unique验证器。正如我在validation.xml中定义的那样,我可以选择验证我的实体的哪些属性:

<constraint name="FOS\UserBundle\Validator\Unique">
   <option name="property">dni</option>
   <option name="message">The value for DNI is already registered</option>
   <option name="groups">
      <value>AppRegistration</value>
      <value>Profile</value>
      <value>UpdateOldUsers</value>
   </option>
</constraint>

但是当我在控制器上调用它时(this之后):

use FOS\UserBundle\Validator\Unique;

public function acceptNewTosAction(Request $request) {
    if ($request->getMethod() == 'POST') {
        $form->bindRequest($request);
        $uniqueConstraint = new Unique(array('property' => 'dni'));
        $formData = $request->request->get('old_user');
        $dni = $formData['dni'];
        $uniqueError = $this->get('validator')->validateValue($dni, $uniqueConstraint);

我收到此错误: Expected argument of type FOS\UserBundle\Model\UserInterface, string given

有可能以这种方式进行吗?我应该如何在控制器中实现唯一验证器? 非常感谢。

1 个答案:

答案 0 :(得分:0)

我意识到这应该如何。只需告诉验证组中的表单:

public function getDefaultOptions(array $options) {
    return array(
        'data_class' => 'Capsa\Bundle\ClubCommonBundle\Entity\User',
        'validation_groups' => array('UpdateOldUsers')

    );
}

然后在控制器中,检查if ($form->isValid())