我在运行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: SPPickListUserBundleEntityUser
我的用户实体:
namespace SPPickListUserBundleEntity;
use DoctrineORMMapping as ORM;
use FOSUserBundleDocumentUser as BaseUser;
/**
* SPPickListUserBundleEntityUser
*
* @ORMTable(name="fos_user")
* @ORMEntity
*/
class User extends BaseUser
{
/**
* @var integer $id
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
}
感谢您的帮助,
James Bench
你似乎在混合ORM和ODM的指令,如果你根据配置使用Doctrine ORM,你的User类必须扩展FOSUserBundleEntityUser
,尝试将use
语句更改为
use FOSUserBundleEntityUser as BaseUser;
为某人节省一些时间。不要忘记,如果您在config.yml中的ORM配置中没有使用auto_mapping,则需要将"FOSUserBundle:~"添加到映射中。
此外,您必须指定将在app/config/config.yml 中使用的实体用户类
# FOS
fos-user:
db_driver: orm
firewall_name: main #optional
user_class: FOSUserBundleEntityUser
我使用的是fosuserbundle的v2.1.2版本,我的User类是
use FOSUserBundleModelUser 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))'