0

我正在尝试在控制器中使用 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>

但是当我在控制器上调用它时(如下

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

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

4

1 回答 1

0

我意识到这应该是怎样的。只需告诉表单在什么验证组中:

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

    );
}

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

于 2012-04-11T10:33:39.273 回答