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 не были добавлены в схему.