FOS/UserBundle: нераспознанное поле: имя пользователяCanonical
Я очень новичок в Symfony 2.0 и FOS/UserBundle. Я устанавливаю его в свой проект, и когда я пытаюсь войти в систему или зарегистрировать нового пользователя, я получаю следующие ошибки:
Нераспознанное поле: имя пользователяCanonical
Я понятия не имею, что это значит? Я поставил свои коды:
файл app/config/security.yml
security:
providers:
fos_userbundle:
id: fos_user.user_manager
firewalls:
main:
pattern: .*
form-login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: /not_found
logout: true
anonymous: true
access_control:
# The WDT has to be allowed to anonymous users to avoid requiring the login with the AJAX request
- { path: ^/_wdt/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_profiler/, role: IS_AUTHENTICATED_ANONYMOUSLY }
# AsseticBundle paths used when using the controller for assets
- { path: ^/js/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/css/, role: IS_AUTHENTICATED_ANONYMOUSLY }
# URL of FOSUserBundle which need to be available to anonymous users
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } # for the case of a failed login
- { path: ^/user/new$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/check-confirmation-email$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/confirm/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/confirmed$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/request-reset-password$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/send-resetting-email$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/check-resetting-email$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user/reset-password/, role: IS_AUTHENTICATED_ANONYMOUSLY }
# Secured part of the site
# This config requires being logged for the whole site and having the admin role for the admin part.
# Change these rules to adapt them to your needs
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/.*, role: ROLE_USER }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPERADMIN: ROLE_ADMIN
Пользовательский объект, расположенный в SecurityBundle:
<?php
namespace App\SecurityBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
/**
* App\SecurityBundle\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;
/**
* @orm:Column(type="string", name="username", length="70")
*/
protected $username;
/**
* @orm:Column(type="string", name="password", length="70")
*/
protected $password;
/**
* @orm:Column(type="string", name="email", length="70")
*/
protected $email;
public function __construct()
{
parent::__construct();
}
}
Пожалуйста, помогите мне?
EDITED: Когда я пытаюсь зарегистрировать нового пользователя, я получаю следующие ошибки:
The "App\SecurityBundle\Entity\User" class metadata does not have any "usernameCanonical" field or association mapping.
Добавил мой config.yml:
imports:
- { resource: parameters.ini }
- { resource: security.yml }
framework:
secret: %secret%
charset: UTF-8
error_handler: null
csrf_protection:
enabled: true
router: { resource: "%kernel.root_dir%/config/routing.yml" }
validation: { enabled: true, annotations: true }
templating: { engines: ['twig'] } #assets_version: SomeVersionScheme
session:
default_locale: %locale%
lifetime: 3600
auto_start: true
# Twig Configuration
twig:
debug: %kernel.debug%
strict_variables: %kernel.debug%
# Assetic Configuration
assetic:
debug: %kernel.debug%
use_controller: false
filters:
cssrewrite: ~
# closure:
# jar: %kernel.root_dir%/java/compiler.jar
# yui_css:
# jar: %kernel.root_dir%/java/yuicompressor-2.4.2.jar
fos_user:
db_driver: orm
firewall_name: main
class:
model:
user: App\SecurityBundle\Entity\User
# Doctrine Configuration
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
dbname: %database_name%
user: %database_user%
password: %database_password%
orm:
auto_generate_proxy_classes: %kernel.debug%
default_entity_manager: default
entity_managers:
default:
mappings:
FOSUserBundle: ~
AppSecurityBundle: { type: annotation, dir: Entity/ }
# Swiftmailer Configuration
swiftmailer:
transport: %mailer_transport%
host: %mailer_host%
username: %mailer_user%
password: %mailer_password%
jms_security_extra:
secure_controllers: true
secure_all_services: false
Ответы
Ответ 1
Возможно, Symfony 2 вообще не может читать отображение.
В вашем приложении /config/config.yml найдите конфигурацию доктрины.
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%
entity_managers:
default:
mappings:
ApplicationSonataUserBundle: ~
SonataUserBundle: ~
FOSUserBundle: ~
Это все, что мне нужно.
Ответ 2
В моем случае автоматическое сопоставление не работает, потому что мне нужно расширить объект (не модель)
use FOS\UserBundle\Model\User as BaseUser;
chage to
use FOS\UserBundle\Entity\User as BaseUser;
Ответ 3
В моем случае, в моем классе пользователя, я использовал
use FOS\UserBundle\Document\User as BaseUser;
вместо
use FOS\UserBundle\Entity\User as BaseUser;
Ответ 4
Вы пытаетесь использовать комплект с установкой Symfony2 Beta1? FriendsOfSymfony UserBundle разработан против репозитория Symbony с выпуклыми краями, и если вы используете бета-версию из Symfony.com, которая довольно устарела по сравнению с текущей фиксацией развития, несомненно, что вещи не будут работать по назначению с помощью UserBundle.
Вы можете либо ждать стабильной версии как Symfony, так и FoSUserBundle, или если вы чувствуете смелость, вы можете обновить свою рабочую копию с помощью хранилища Symfony GitHub, найденного здесь, который позволит вам использовать FoSUserBundle в среде, для которой он предназначен.
Ответ 5
В моем случае мне пришлось обновить доктрину /orm и doctrine/doctrine-bundle, потому что по какой-то причине поля в базовом классе User не были добавлены в схему.