Ошибка Symfony2: значение параметра не существует в ограничении

У меня есть 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

Вот мой класс Entity, я усек сеттеры и геттеры, чтобы уменьшить длину этого поста: namespace 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;
    }
}

Любые идеи о том, как исправить эту ошибку?


person Paul A.    schedule 12.04.2014    source источник
comment
Можете ли вы показать нам класс Factory\WebServicesBundle\Entity\User?   -  person Benjamin Lazarecki    schedule 12.04.2014
comment
Да, добавил в исходный пост   -  person Paul A.    schedule 12.04.2014


Ответы (2)


Я думаю, что проблема в объявлении uniqueEntity

Вы должны использовать @UniqueEntity(fields = "email", message="A message") вместо @UniqueEntity("email", message="A message").

Когда вы передаете более одного параметра в аннотацию UniqueEntity, вы должны объявить каждый параметр. Вы можете использовать @UniqueEntity("email") только при наличии одного параметра.

Надеюсь, это полезно.

С наилучшими пожеланиями.

person Benjamin Lazarecki    schedule 13.04.2014
comment
Ваш комментарий указал мне правильное направление, но ответ не исправил ошибку. В итоге я удалил из него UniqueEntity, так как FOSUserBundle уже реализует его, но у меня есть другое приложение, которое использует ту же модель, но не через FOSUserBundle, поэтому я думаю, что произошел конфликт. - person Paul A.; 20.04.2014

Я столкнулся с аналогичной ошибкой при очистке кеша после того, как я понизил версию Symfony 2.4 до 2.3.

[Symfony\Component\Validator\Exception\InvalidOptionsException]
Параметр «значение» не существует в ограничении Symfony\Component\Validator\Constraints\Regex

Ответ @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")
person dsilva    schedule 01.04.2015