FOS/UserBundle: Неизвестное поле: usernameCanonical

Я новичок в Symfony 2.0 и FOS/UserBundle. Я устанавливаю его в свой проект, и когда я пытаюсь войти или зарегистрировать нового пользователя, я получаю следующие ошибки:

Неизвестное поле: usernameCanonical

Я понятия не имею, что это значит? Я положил свои коды:

файл 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();
    }
}

Помогите мне, пожалуйста?

ОТРЕДАКТИРОВАНО: Когда я пытаюсь зарегистрировать нового пользователя, я получаю следующие ошибки:

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

person Zeck    schedule 14.05.2011    source источник
comment
Все метаданные для отображения пользовательского ORM предоставляются в формате XML (FOS/UserBundle/Resources/config/doctrine/User.orm.xml), а ваши метаданные ORM предоставляются в аннотациях. Я не думаю, что вы можете использовать два формата метаданных в одном пакете. Вы нашли решение с тех пор, как опубликовали этот вопрос?   -  person Sewdn    schedule 05.08.2011
comment
Не поделитесь решением? Я запускаю последние версии symfony и fosuserbundle и получаю ту же ошибку.   -  person jfgrissom    schedule 19.08.2011
comment
@Zeck Да, решение было бы хорошим!   -  person FMaz008    schedule 19.10.2011


Ответы (5)


В моем случае автоматическое сопоставление не работает, потому что мне нужно было расширить сущность (а не модель)

use FOS\UserBundle\Model\User as BaseUser;

перейти к

use FOS\UserBundle\Entity\User as BaseUser;
person Alexei T    schedule 05.08.2013

Возможно, Symfony 2 вообще не может прочитать сопоставление.

В вашем app/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: ~

Это было все, что мне было нужно.

person John Doe    schedule 20.12.2011
comment
+1 хорошая точка на сопоставлениях! Это начало происходить в тот момент, когда я перестал использовать auto_mapping ;) - person Jovan Perovic; 27.02.2013
comment
После этого я обновил схему: php app/console doctrine:schema:update --force и воссоздал пользователя-администратора: php app/console fos:user:create admintest [email protected] pass --super-admin. Тогда он работал нормально для меня. - person Beniston; 12.07.2013

В моем случае в моем пользовательском классе я использовал

use FOS\UserBundle\Document\User as BaseUser;

вместо

use FOS\UserBundle\Entity\User as BaseUser;
person FMaz008    schedule 19.10.2011

Вы пытаетесь использовать пакет с установкой Symfony2 Beta1? Пакет FriendsOfSymfony UserBundle разработан на основе передового репозитория Symfony, и если вы используете бета-версию с сайта Symfony.com, который довольно устарел по сравнению с текущим коммитом разработки, несомненно, с UserBundle все будет работать не так, как предполагалось.

Вы можете дождаться стабильной версии как Symfony, так и FoSUserBundle, или, если вы чувствуете себя смелым, вы можете поддерживать свою рабочую копию в актуальном состоянии с помощью репозитория Symfony GitHub, найденного здесь, что позволит вам использовать FoSUserBundle в той среде, для которой он предназначен.

person Derek Stobbe    schedule 15.05.2011

В моем случае мне пришлось обновить доктрину/орм и доктрину/доктрину-связку, потому что по какой-то причине поля в базовом классе User не были добавлены в схему.

person Francesco Donzello    schedule 16.04.2016