Php 教条没有';t映射来自FOSUserBundle用户类的字段

Php 教条没有';t映射来自FOSUserBundle用户类的字段,php,doctrine-orm,fosuserbundle,symfony-2.1,Php,Doctrine Orm,Fosuserbundle,Symfony 2.1,我正在运行PHP5.3.13的Windows服务器上使用symfony2.1RC1和FOSUserbundle 我遵循了这一原则,但该原则不会在数据库中为从基本FOS用户类继承的属性创建字段(只创建来自我的类的字段) 尝试使用FOS登录表单登录会产生错误: Unrecognized field: usernameCanonical 我有以下原则配置: # Doctrine Configuration doctrine: dbal: driver: %database

我正在运行PHP5.3.13的Windows服务器上使用
symfony2.1RC1
FOSUserbundle

我遵循了这一原则,但该原则不会在数据库中为从基本FOS用户类继承的属性创建字段(只创建来自我的类的字段)

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

Unrecognized field: usernameCanonical
我有以下原则配置:

# 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
FOSUserBundle配置如下所示:

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: SP\PickList\UserBundle\Entity\User
我的用户实体:
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;
    }
}
谢谢你的帮助


James Bench

您似乎在混合ORM和ODM的说明,如果您按照配置使用ORM,您的用户类必须扩展
FOS\UserBundle\Entity\User
,尝试将
use
语句更改为

use FOS\UserBundle\Entity\User as BaseUser;

为某人节省一些时间。不要忘记,如果您没有在config.yml中的ORM配置中使用自动映射,则需要在映射中添加'FOSUserBundle:~'

您还必须指定将在app/config/config.yml中使用的实体用户类

# FOS
fos-user: 
    db_driver: orm
    firewall_name: main #optional
    user_class: FOS\UserBundle\Entity\User

我使用的是fosuserbundle的v2.1.2,我的用户类是

use FOS\UserBundle\Model\User as BaseUser;
class Nutzer extends BaseUser {...}
我的config.yml看起来像

orm:
    default_entity_manager: default
    entity_managers:
        default:
            connection: postgres
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                AppBundle: ~ 
        my:
            connection: mysql
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                AppBundle: ~
                FOSUserBundle: ~ #this line does not change anything if left out

        ms:
            connection: mssql
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
               AppBundle: ~
仍然只创建此SQL(使用
--em=my
创建架构时):

所以所有的基本字段都丢失了

映射
FOSUserBundle:~
中的行不会更改任何内容

但是对于postgresql和mssql entitymanager,一切都正常

例如,对于博士后:

CREATE TABLE nutzer (id INT NOT NULL, supervisor_id INT DEFAULT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) DEFAULT NULL, password VARCHAR(255) NOT NULL, last_login TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, confirmation_token VARCHAR(180) DEFAULT NULL, password_requested_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, roles TEXT NOT NULL, api_key VARCHAR(64) DEFAULT NULL, PRIMARY KEY(id))'

FOS\UserBundle\Entity\User在较新版本的FOS UserBundle中不推荐使用。您应该扩展FOS\UserBundle\Model\User.FYI,如果您使用1.3版,请扩展FOS\UserBundle\Entity\User。如果您使用2.0版,请扩展FOS\UserBundle\Model\User。非常感谢!!花了几个小时才弄明白,结果我用的是FOS\User\UserBundle\Model\User!!!:(我使用的是2.0,我使用的是“use FOS\UserBundle\Model\User as BaseUser”;我有一个简单的实体,只有ID字段..从他们的入门中复制和粘贴..我的数据库中仍然只有ID列..知道为什么吗?
CREATE TABLE nutzer (id INT NOT NULL, supervisor_id INT DEFAULT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) DEFAULT NULL, password VARCHAR(255) NOT NULL, last_login TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, confirmation_token VARCHAR(180) DEFAULT NULL, password_requested_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, roles TEXT NOT NULL, api_key VARCHAR(64) DEFAULT NULL, PRIMARY KEY(id))'