【问题标题】:Symfony2 Error: The options "value" do not exist in constraintSymfony2 错误:约束中不存在选项“值”
【发布时间】:2014-05-26 08:31:06
【问题描述】:

我有一个 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;
    }
}

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

【问题讨论】:

  • 你能给我们看看 Factory\WebServicesBundle\Entity\User 类吗?
  • 是的,我已将其添加到初始帖子中

标签: php symfony fosuserbundle unique-constraint


【解决方案1】:

我认为问题出在 uniqueEntity 声明上

您应该使用@UniqueEntity(fields = "email", message="A message") 而不是@UniqueEntity("email", message="A message")

当您向 UniqueEntity 注释传递多个参数时,您应该声明每个参数。 @UniqueEntity("email")只有一个参数才可以使用。

希望对你有帮助。

最好的尊重。

【讨论】:

  • 您的评论为我指明了正确的方向,但回复并未修复错误。我最终从中删除了 UniqueEntity,因为 FOSUserBundle 已经实现了它,但是我有另一个使用相同模型但不是通过 FOSUserBundle 的应用程序,所以我认为存在冲突。
【解决方案2】:

我从 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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-11
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2015-04-24
    • 2012-08-28
    • 2016-02-26
    相关资源
    最近更新 更多