我试图覆盖FOSUserBundle的用户映射的两个属性。

use FOS\UserBundle\Model\User as BaseUser;
...
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="user")
 * @UniqueEntity(
 *     fields={"emailCanonical", "zone"},
 *     errorPath="email",
 *     message="This email address is already in use."
 * )
 * @ORM\AttributeOverrides({
 *     @ORM\AttributeOverride(name="email", column=@ORM\Column(type="string", name="email", length=255, unique=false, nullable=false)),
 *     @ORM\AttributeOverride(name="emailCanonical", column=@ORM\Column(type="string", name="emailCanonical", length=255, unique=false, nullable=false))
 * })
 */
class User extends BaseUser
{
    ...

除了生成访问器时,其他一切似乎都正常运行:Invalid field override named 'email'
错误在这里抛出:
// Doctrine\ORM\Mapping\ClassMetadataInfo

public function setAttributeOverride($fieldName, array $overrideMapping)
{
    if ( ! isset($this->fieldMappings[$fieldName])) {
        throw MappingException::invalidOverrideFieldName($this->name, $fieldName);
    }

在这里,$this->fieldMappings仅包含我的 child User的字段,而不包含 parent (映射的父类(super class))的字段。

有人知道了吗?

最佳答案

我设法用解决此问题的方法是,为类[class] 命名为[field]的无效字段覆盖是在我覆盖它的类中添加了覆盖的属性。

我正在使用 Symfony v2.7.8 Doctrine v1.6.1 版本。

例子:

<?php

use FOS\UserBundle\Model\User as BaseUser;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 *
 * @ORM\HasLifecycleCallbacks
 * @ORM\AttributeOverrides({
 *     @ORM\AttributeOverride(name="usernameCanonical",
 *         column=@ORM\Column(
 *             type="string",
 *             name="username_canonical",
 *             length=255,
 *             unique=false
 *         )
 *     )
 * })
 */
class User extends BaseUser
{
    /**
     * @var string
     *
     * @ORM\Column(type="string", name="username_canonical", length=255, unique=false)
     */
    protected $usernameCanonical;
    ...
}

09-11 19:22
查看更多