5

我在运行 PHP 5.3.13 的 Windows 服务器上使用Symfony 2.1 RC1和。FOSUserbundle

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

尝试使用 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;
    }
}

谢谢你的帮助,

詹姆斯·班奇

4

4 回答 4

17

看来您正在混合 ORM 和 ODM 的说明,如果您根据配置使用 Doctrine ORM,您的 User 类必须扩展FOS\UserBundle\Entity\User,尝试将use语句更改为

use FOS\UserBundle\Entity\User as BaseUser;
于 2012-08-21T19:55:59.120 回答
5

To save someone some time. Don't forget if you are not using auto_mapping in your ORM config in config.yml you need to add 'FOSUserBundle: ~' to the mapping.

于 2013-04-13T18:08:09.613 回答
1

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

# FOS
fos-user: 
    db_driver: orm
    firewall_name: main #optional
    user_class: FOS\UserBundle\Entity\User
于 2013-05-28T06:20:19.913 回答
0

我正在使用 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):

CREATE TABLE nutzer (id INT AUTO_INCREMENT NOT NULL, supervisor_id INT DEFAULT NULL, api_key VARCHAR(64) DEFAULT NULL, INDEX IDX_A9B4F58919E9AC5F (supervisor_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;

所以所有的基本字段都不见了!

映射中的行FOSUserBundle: ~不会改变任何东西。

但是对于 postgresql 和 mssql 实体管理器,一切正常!

例如对于 postgres:

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))'
于 2018-10-10T11:03:22.807 回答