5

PHP5.3.13を実行しているWindowsサーバーでSymfony 2.1 RC1とを使用しています。FOSUserbundle

ここの指示に従いました が、Doctrineは基本FOS Userクラスから継承されたプロパティのフィールドをデータベースに作成しません(私のクラスのフィールドのみ)。

FOSログインフォームを使用してログインしようとすると、エラーが発生します。

Unrecognized field: usernameCanonical

私は次のDoctrine構成を持っています:

# Doctrine Configuration
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%
        auto_mapping: true

また、FOSUserBundleの構成は次のようになります。

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: SP\PickList\UserBundle\Entity\User

マイユーザーエンティティ:

namespace SP\PickList\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Document\User as BaseUser;

/**
 * SP\PickList\UserBundle\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;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
}

助けてくれてありがとう、

ジェームズベンチ

4

4 に答える 4

17

ORMとODMの命令を混合しているようです。構成に従ってDoctrineORMを使用する場合は、ユーザークラスを拡張する必要があります。ステートメントを次FOS\UserBundle\Entity\Userのように変更してみてください。use

use FOS\UserBundle\Entity\User as BaseUser;
于 2012-08-21T19:55:59.120 に答える
5

誰かの時間を節約するため。config.ymlのORM構成でauto_mappingを使用していない場合は、マッピングに「FOSUserBundle:〜」を追加する必要があることを忘れないでください。

于 2013-04-13T18:08:09.613 に答える
1

また、app / config/config.ymlで使用するエンティティユーザークラスを指定する必要があります

# FOS
fos-user: 
    db_driver: orm
    firewall_name: main #optional
    user_class: FOS\UserBundle\Entity\User
于 2013-05-28T06:20:19.913 に答える
0

私はfosuserbundleのv2.1.2を使用しています、私のユーザークラスは

use FOS\UserBundle\Model\User as BaseUser;
class Nutzer extends BaseUser {...}

私のconfig.ymlは次のようになります

orm:
    default_entity_manager: default
    entity_managers:
        default:
            connection: postgres
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                AppBundle: ~ 
        my:
            connection: mysql
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
                AppBundle: ~
                FOSUserBundle: ~ #this line does not change anything if left out

        ms:
            connection: mssql
            naming_strategy: doctrine.orm.naming_strategy.underscore
            mappings:
               AppBundle: ~

それでも、このSQLのみが作成されます(でスキーマを作成する場合--em=my):

CREATE TABLE nutzer (id INT AUTO_INCREMENT NOT NULL, supervisor_id INT DEFAULT NULL, api_key VARCHAR(64) DEFAULT NULL, INDEX IDX_A9B4F58919E9AC5F (supervisor_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB;

したがって、すべての基本フィールドが欠落しています!

マッピングの行はFOSUserBundle: ~何も変更しません。

しかし、postgresqlとmssql entitymanagerの場合、すべてが機能します!

例:postgresの場合:

CREATE TABLE nutzer (id INT NOT NULL, supervisor_id INT DEFAULT NULL, username VARCHAR(180) NOT NULL, username_canonical VARCHAR(180) NOT NULL, email VARCHAR(180) NOT NULL, email_canonical VARCHAR(180) NOT NULL, enabled BOOLEAN NOT NULL, salt VARCHAR(255) DEFAULT NULL, password VARCHAR(255) NOT NULL, last_login TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, confirmation_token VARCHAR(180) DEFAULT NULL, password_requested_at TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT NULL, roles TEXT NOT NULL, api_key VARCHAR(64) DEFAULT NULL, PRIMARY KEY(id))'
于 2018-10-10T11:03:22.807 に答える