2011-08-11 3 views
4

Hyのみんな、FOSUserBundle性質

は、私は自分のアプリケーションでユーザー認証を処理するためのFOSUserBundleを使用することにしました。 私のアプリケーションでは、企業の詳細(名前、住所など)を登録することができます。

私は会社関連のデータを保持するCompanyというエンティティとUserというエンティティを作成して、FOSUserBundleからユーザーデータを個別に保持することにしました。

ドキュメントOverriding Default FOSUserBundle Formsに記載されているデフォルトの登録フォームを無効にし始めましたが、私のフィールドを会社のフォームに追加できないため、常にユーザーエンティティからアクセスしようとしますそれはFOSUserBundleに関連しているためです)。

FOSUser登録フォームにCompanyエンティティフィールドを入れる方法はありますか?

私はFOSUserの基本エンティティとして会社を使用し、すべてのフィールド(ユーザー名、電子メール、パスワードなど)を追加することで、データモデルを台無しにしたくありません。

敬具、意味論的に言えば、

答えて

5

Userは人である必要はありませんので、私は会社がアプリケーションのユーザであるための理由を見ません。私はまた、あなたのデータベースに2つの別々のテーブルを持つ理由がないのを見ています。

fos_user: 
    user_class: Acme\Bundle\AcmeBundle\Entity\Company 

今すぐUserBundleが知っている:

namespace Acme\Bundle\AcmeBundle\Entity; 

use FOS\UserBundle\Entity\User; 

class Company extends User 
{ 
    // Your company related fields and related getters/setters go here. 
} 

はその後(例えばapp/config/config.ymlで)あなたの設定からユーザークラスをオーバーライドします。

私は、ユーザークラスを拡張し、別会社のクラスを作成しますどのクラスをUserとして使用するかを指定します。カスタムクラスを設定したら、RegistrationFormTypeを上書きしてカスタムフィールドを組み込むことができます。

、しかし、あなたはまだあなたのアプリケーションに2つの別々のエンティティを使用したい場合、私はあなたがOne-To-One relationship経由でそれらを接続し、フォームにembedding a single objectに関するドキュメントを以下によりRegistrationFormTypeにごCompanyエンティティを埋め込むことをお勧めします。

参考:https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/overriding_forms.md