Doctrine不会映射FOSUserBundle User类中的字段

jeb*_*nch 5 php doctrine-orm fosuserbundle symfony-2.1

我使用Symfony 2.1 RC1FOSUserbundleWindows服务器上运行PHP 5.3.13.

我已按照此处的说明进行操作, 但Doctrine不会在数据库中为从基本FOS User类继承的属性创建字段(仅限我的类中的字段).

尝试使用FOS登录表单登录会产生错误:

Unrecognized field: usernameCanonical
Run Code Online (Sandbox Code Playgroud)

我有以下Doctrine配置:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true
Run Code Online (Sandbox Code Playgroud)

FOSUserBundle配置如下所示:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: SP\PickList\UserBundle\Entity\User
Run Code Online (Sandbox Code Playgroud)

我的用户实体:

namespace SP\PickList\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Document\User as BaseUser;

/**
 * SP\PickList\UserBundle\Entity\User
 *
 * @ORM\Table(name="fos_user")
 * @ORM\Entity
 */
class User extends BaseUser
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,

James Bench

小智 17

看来你正在混合使用ORM和ODM的指令,如果按照你的配置使用Doctrine ORM,你的User类必须扩展FOS\UserBundle\Entity\User,尝试将use语句改为

use FOS\UserBundle\Entity\User as BaseUser;
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,如果您使用的是版本1.3,请扩展FOS\UserBundle\Entity\User.如果您使用的是2.0版,请扩展FOS\UserBundle\Model\User. (5认同)
  • 在较新版本的FOS UserBundle中不推荐使用FOS\UserBundle\Entity\User.你应该扩展FOS\UserBundle\Model\User. (4认同)

som*_*ser 5

为了节省一些时间.不要忘记如果你没有在config.yml的ORM配置中使用auto_mapping,你需要在映射中添加'FOSUserBundle:〜'.