2011-05-14 14 views
11

Sono molto nuovo a Symfony 2.0 e FOS/UserBundle. Sono installarlo per il mio progetto e quando si cerca di effettuare il login o registrati Nuovo ricevo seguenti errori:FOS/UserBundle: campo non riconosciuto: usernameCanonical

campo non riconosciuto: usernameCanonical

non ho idea di cosa vuol dire? Sto messo i miei codici:

app// file di configurazione security.yml entità

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 

utente si trova nella 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(); 
    } 
} 

Please help me?

Modificato: Quando si cerca di registrare nuovo utente ricevo qui di seguito gli errori:

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

aggiunto il mio 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

Tutti i metadati per la mappatura ORM utente sono forniti in formato XML (FOS/UserBundle/Resources/config/doctrine/User.orm.xml) e i tuoi metadati ORM sono forniti nelle annotazioni. Non penso che tu possa utilizzare due formati di metatdati nello stesso pacchetto. Hai trovato una soluzione da quando hai postato questa domanda? – Sewdn

+0

Sì, mi sono trovato una soluzione. – Zeck

+3

Ti dispiace condividere la soluzione? Sto eseguendo le ultime versioni di symfony e fosuserbundle e sto ricevendo lo stesso errore. – jfgrissom

risposta

1

Stai cercando di utilizzare il bundle con Symfony2 Beta1 installare? L'UserBundle di FriendsOfSymfony è sviluppato contro il repository Bleeding Edge di Symfony e, se stai utilizzando la versione beta da Symfony.com, che è abbastanza obsoleto rispetto al commit di sviluppo corrente, senza dubbio le cose non funzioneranno come previsto con UserBundle.

È possibile attendere una versione stabile di Symfony e FoSUserBundle oppure, se ti senti audace, puoi mantenere aggiornata la tua copia di lavoro con il repository Symfony GitHub trovato here, che ti consentirà di utilizzare il FoSUserBundle nell'ambiente per il quale è destinato.

4

Nel mio caso, nella mia classe utente, stavo usando

use FOS\UserBundle\Document\User as BaseUser; 

invece di

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

Forse Symfony 2 non può leggere la mappatura a tutti.

Alla tua app/config/config.yml cerca la configurazione di doctrine.

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

Questo era tutto ciò di cui avevo bisogno.

+1

+1 buon punto sulle mappature! Ha iniziato a succedere nel momento in cui ho smesso di usare auto_mapping;) –

+3

Dopo averlo fatto, ho aggiornato lo schema: php app/console doctrine: schema: update --force e ricreato l'utente admin: php app/console fos: user: create admintest admin @ test.com passa --super-admin. Quindi ha funzionato bene per me. – Beniston

20

Nel mio mappatura automatica caso non funziona perché avevo bisogno di estendere entità (non il modello)

use FOS\UserBundle\Model\User as BaseUser; 

chage al

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

L'utilizzo di Entity è ora [** deprecato **] (https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Entity/User.php#L23), non dovresti fare affidamento su di esso. – Touki

+2

sì e no! Questa risposta è corretta se hai installato la versione "1.3.5". Se sei nel ramo -dev, @Touki ha ragione. – jakabadambalazs

+1

Sembra che Model sia usato nella versione 2.0 mentre Entity è usato in 1.3 –

0

Nel mio caso, ho dovuto aggiornare la dottrina/orm e doctrine/doctrine-bundle perché per qualche motivo i campi nella classe utente di base non sono stati aggiunti allo schema.