Symfony2错误:约束中不存在选项“值”

时间:2014-04-12 02:04:14

标签: php symfony fosuserbundle unique-constraint

我有一个Symfony FOSUserBundle,我正在使用我的Symfony2应用程序。我遇到了一个问题,我需要帮助找到解决方案,因为我不知道它为什么会出现。安装后,我已经测试了注册和登录,但是现在当我尝试重置密码时,它给了我一个错误“选项”值“在约束Symfony \ Bridge \ Doctrine \ Validator \ Constraints \ UniqueEntity中不存在” 。我没有修改symfony2供应商类,我确信我没有向FOSUserBundle添加任何其他内容来改变它的行为。这是我的FOSUserBundle配置:

fos_user:
db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
firewall_name: main
user_class: Main\BundleName\Entity\User
service:
    mailer: fos_user.mailer.twig_swift
registration:
    confirmation:
        enabled: true
        from_email:
            address: ....some email address here
            sender_name:    The senders name

这是我的实体类,我已经截断了setter和getter来减少这篇文章的篇幅:     命名空间Main \ BundleName \ Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * User
 *
 * @ORM\Table(name="User")
 * @ORM\Entity
 * @UniqueEntity("email", message="A user with the specified email already exists")
 * @UniqueEntity("username", message="A user with the specified username already exists")
 */
class User extends BaseUser
{


 /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=255, nullable=false)
     */
    protected $password;

    /**
     * @var string
     */
    protected $salt;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255, nullable=false)

     */
    private $firstName;

    /**
     * @var string
     *
     * @ORM\Column(name="last_name", type="string", length=200, nullable=true)
     */
    private $lastName;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=200, nullable=true)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="thumbnail", type="string", length=200, nullable=true)
     */

     // Getters and Setters ...truncated ....
    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set username
     *
     * @param string $username
     * @return User
     */
    public function setUsername($username)
    {
        $this->username = $username;

        return $this;
    }

    /**
     * Get username
     *
     * @return string 
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * Set password
     *
     * @param string $password
     * @return User
     */
    public function setPassword($password)
    {
        $this->password = $password;

        return $this;
    }

    /**
     * Get password
     *
     * @return string 
     */
    public function getPassword()
    {
        return $this->password;
    }
}

有关如何解决此错误的任何想法?

2 个答案:

答案 0 :(得分:1)

我认为问题出在uniqueEntity声明

您应该使用@UniqueEntity(fields = "email", message="A message")代替@UniqueEntity("email", message="A message")

当您将多个参数传递给UniqueEntity注释时,您应该声明每个参数。仅当有一个参数时,您才能使用@UniqueEntity("email")

希望它有所帮助。

最好的关注。

答案 1 :(得分:1)

我在从Symfony 2.4降级到2.3之后清除缓存时遇到了类似的错误。

[Symfony的\元器件\验证\异常\ InvalidOptionsException]
  约束Symfony \ Component \ Validator \ Constraints \ Regex

中不存在选项“value”

@Benjamin Lazarecki的回答帮助我找到了解决方案

当我在Symfony2.4时,这个注释不是问题:

 @Assert\Regex("/^[0-9]{4}(?:-[0-9]{3})?$/", match=true, message="Format XXXX-XXX")

但是在降级之后,似乎我需要在声明下面的注释模式时明确:

 @Assert\Regex(pattern="/^[0-9]{4}(?:-[0-9]{3})?$/", match=true, message="Format XXXX-XXX")