2011-05-14 18 views
11

Soy nuevo en Symfony 2.0 y FOS/UserBundle. Estoy instalarlo en mi proyecto y cuando tratando de iniciar sesión o registrarse nuevo usuario consigo siguientes errores:FOS/UserBundle: campo no reconocido: usernameCanonical

campo no reconocido: usernameCanonical

no he ni idea de lo que significa? Me puse los códigos:

app/config/archivos security.yml entidad

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 

usuario que se encuentra en 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(); 
    } 
} 

ayudarme por favor?

Editado: Cuando intentar registrar nuevo usuario llegue por debajo de los errores:

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

Añadido mi 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

Todos los metadatos para la asignación de ORM del usuario se proporcionan en formato XML (FOS/UserBundle/Resources/config/doctrine/User.orm.xml) y sus metadatos ORM se proporcionan en anotaciones. No creo que puedas usar dos formatos de metadatos en el mismo paquete. ¿Has encontrado una solución desde que publicaste esta pregunta? – Sewdn

+0

Sí, encontré una solución. – Zeck

+3

¿Te importa compartir la solución? Estoy ejecutando las últimas versiones de symfony y fosuserbundle y estoy obteniendo el mismo error. – jfgrissom

Respuesta

1

¿Estás tratando de utilizar el paquete con Symfony2 Beta1 ¿instalar? FriendsOfSymfony UserBundle está desarrollado contra el repositorio de Symfony, y si está utilizando la versión beta de Symfony.com, que está bastante desactualizada en comparación con la confirmación de desarrollo actual, sin duda las cosas no funcionarán como se esperaba con el UserBundle.

Puede esperar un lanzamiento estable de Symfony y FoSUserBundle, o si se siente atrevido, puede mantener su copia de trabajo actualizada con el repositorio de Symfony GitHub encontrado here, que le permitirá usar el FoSUserBundle en el entorno para el que está destinado.

4

En mi caso, en mi clase de usuario, que estaba usando

use FOS\UserBundle\Document\User as BaseUser; 

en lugar de

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

Tal Symfony 2 no puede leer el mapeo en absoluto.

En su aplicación/config/config.yml busque la configuración de la doctrina.

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

Eso era todo lo que necesitaba.

+1

+1 buen punto en las asignaciones! Empezó a suceder en el momento en que dejé de usar auto_mapping;) –

+3

Después de hacer esto, actualicé el esquema: php app/console doctrine: schema: update --force y recreé el usuario administrador: php app/console fos: usuario: create admintest admin @ test.com pass --super-admin. Entonces funcionó bien para mí. – Beniston

20

En mi mapeo automático caso no funciona porque necesitaba extender entidad (no modelo)

use FOS\UserBundle\Model\User as BaseUser; 

chage a

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

El uso de Entity ahora está [** en desuso **] (https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Entity/User.php#L23), no debe confiar en él. – Touki

+2

sí y no! Esta respuesta es correcta si tiene instalada la versión "1.3.5". Si estás en la rama -dev entonces @Touki tiene razón. – jakabadambalazs

+1

Parece que el modelo se usa en la versión 2.0 mientras que la entidad se usa en 1.3 –

0

En mi caso, tuve que actualizar la doctrina/orm y paquete doctrina/doctrina porque, por alguna razón, los campos de la clase de usuario base no se agregaron al esquema.

Cuestiones relacionadas