2011-05-14 13 views
11

Jestem bardzo nowy w Symfony 2.0 i FOS/UserBundle. Jestem zainstalować go do mojego projektu, a kiedy próbuje się zalogować lub zarejestrować nowego użytkownika otrzymuję następujące błędy:FOS/UserBundle: Nierozpoznane pole: usernameCanonical

Nierozpoznany murawę: usernameCanonical

I nie ma pojęcia, co to oznacza? Ja położyłem kodów:

app/config/plików security.yml jednostka

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 

użytkownika znajduje się w 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(); 
    } 
} 

proszę mi pomóc?

edycja: Kiedy próbuje zarejestrować nowego użytkownika otrzymuję poniżej błędów:

The "App\SecurityBundle\Entity\User" class metadata does not have any "usernameCanonical" field or association mapping. 

Dodano mój 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 
+0

Wszystkie metadane mapowania ORM użytkownika są dostarczane w formacie XML (FOS/UserBundle/Resources/config/doctrine/User.orm.xml), a metadane ORM są zawarte w adnotacjach. Nie sądzę, że możesz użyć dwóch formatów metatdata w tym samym pakiecie. Czy znalazłeś rozwiązanie, odkąd umieściłeś to pytanie? – Sewdn

+0

Tak, znalazłem rozwiązanie. – Zeck

+3

Czy chcesz udostępnić rozwiązanie? Używam ostatnio wersji symfony i fosuserbundle i otrzymuję ten sam błąd. – jfgrissom

Odpowiedz

1

Próbujesz użyć paczkę z Symfony2 Beta1 zainstalować? Zestaw FriendsOfSymfony UserBundle został opracowany na tle najbardziej krwawego repozytorium Symfony, a jeśli używasz wersji beta od Symfony.com, która jest dość przestarzała w porównaniu do bieżącego zatwierdzenia rozwoju, niewątpliwie rzeczy nie będą działać zgodnie z przeznaczeniem w UserBundle.

Możesz albo poczekać na stabilne wydanie Symfony i FoSUserBundle, albo jeśli czujesz się odważny, możesz zachować swoją kopię roboczą na bieżąco z repozytorium Symfony GitHub znalezionym pod numerem here, które pozwoli ci użyć FoSUserBundle w środowisku, dla którego jest przeznaczony.

4

W moim przypadku, w mojej klasie użytkownika, używałem

use FOS\UserBundle\Document\User as BaseUser; 

zamiast

use FOS\UserBundle\Entity\User as BaseUser; 
20

Może Symfony 2 nie może odczytać mapowania w ogóle.

Na swojej aplikacji/config/config.yml poszukaj konfiguracji doktryny.

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: ~ 

To było wszystko, czego potrzebowałem.

+1

+1 dobry punkt odwzorowań! Zaczęło się to dziać w momencie, w którym przestałem używać auto_mapping;) –

+3

Po wykonaniu tej czynności zaktualizowałem schemat: php app/console doctrine: schema: update --force i ponownie utworzono administratora: php app/console fos: user: create admintest admin @ test.com pass --super-admin. Potem zadziałało dobrze. – Beniston

20

w moim przypadku automatycznego mapowania nie działa, ponieważ musiałem przedłużyć podmiot (nie modelu)

use FOS\UserBundle\Model\User as BaseUser; 

chage do

use FOS\UserBundle\Entity\User as BaseUser; 
+1

Korzystanie z Entity jest teraz [** przestarzałe **] (https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Entity/User.php#L23), nie powinieneś na nim polegać. – Touki

+2

tak i nie! Ta odpowiedź jest poprawna, jeśli masz zainstalowaną wersję "1.3.5". Jeśli jesteś w gałęzi -dev, to @Touki ma rację. – jakabadambalazs

+1

Wygląda na to, że Model jest używany w wersji 2.0, a Entity w wersji 1.3. –

0

W moim przypadku musiałem uaktualnić doktryny/ORM i doktryna/pakiet doktrynowy, ponieważ z jakiegoś powodu pola w podstawowej klasie użytkownika nie zostały dodane do schematu.

Powiązane problemy