我试图覆盖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;
...
}