2011-05-14 19 views
11

私は、Symfony 2.0とFOS/UserBundleの新機能です。FOS/UserBundle:認識できないフィールド:usernameCanonical

認識できないフィールド:usernameCanonical私は考え、それが何を意味していない

を私がログインするか、私は次のエラーを取得し、新規ユーザーを登録しようとしたとき、私は自分のプロジェクトにそれをインストールだと?

アプリ/設定/のsecurity.ymlファイルSecurityBundleに位置

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 

Userエンティティ:

<?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 
+0

ユーザーORMマッピングのすべてのメタデータは、XML形式(FOS/UserBundle/Resources/config/doctrine/User.orm)で提供されます。xml)、ORMメタデータはアノテーションで提供されます。同じバンドルで2つのメタデータ形式を使用できるとは思いません。この質問を掲載して以来、解決策を見つけましたか? – Sewdn

+0

はい、解決策が見つかりました。 – Zeck

+3

ソリューションを共有してもよろしいですか?私はsymfonyとfosuserbundleの両方の最新バージョンを実行していますが、同じエラーが発生しています。 – jfgrissom

答えて

1

あなたはSymfony2のベータ1のバンドルを使用しようとしていますインストール? FriendsOfSymfony UserBundleは、Symfonyの最先端のリポジトリに対して開発されています。Symfony.comのベータ版を使用している場合、現在の開発コミットと比較してかなり古くなっていますが、間違いなくUserBundleで意図した通りに機能しません。

symfonyとFoSUserBundleの両方の安定したリリースを待つか、大胆さを感じる場合は、Symfony GitHubリポジトリhereで作業コピーを最新の状態に保つことができます。それが意図されている環境内のFoSUserBundle。私の場合は

4

は、私のユーザークラスで、私は

use FOS\UserBundle\Document\User as BaseUser; 

代わりの

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

たぶん、symfonyの2は、すべてのマッピングを読み取ることができませんを使用していました。

あなたのapp/config/config.ymlで、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: ~ 

これはすべて必要なものでした。

+1

+1の良いポイント! ) –

+3

これを実行した後、私はスキーマを更新しました:php app/console doctrine:schema:update --force adminユーザを再作成しました:php app/console fos:user:create admintest admin @ test.com pass --super-admin。それから、私にとってはうまくいった。 – Beniston

20

私の場合は、自動マッピングは、私は私の場合は

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

エンティティの使用は現在廃止されています(https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Entity/User.php#L23)。これに頼るべきではありません。 – Touki

+2

はい、いいえ!この回答は、バージョン「1.3.5」がインストールされている場合は正しいです。あなたが-devブランチ上にいれば@Toukiは正しいです。 – jakabadambalazs

+1

バージョン2.0ではModelが使用されていますが、Entityは1.3で使用されているようです –

0

にエンティティ(ないモデル)

use FOS\UserBundle\Model\User as BaseUser; 

チャゲを拡張するために必要なので、私は教義/ ORMをアップグレードしなければならなかった動作しません。何らかの理由で基本Userクラスのフィールドがスキーマに追加されなかったため、doctrine/doctrine-bundleを使用します。

関連する問題