6

私は Symfony2 をまったく初めて使用しますが、このフレームワークにはすでに夢中になっています。

3 つの異なるユーザー タイプが必要なプロジェクトがあります。

1 人はスーパー管理者、他の 2 人は通常のユーザーですが、プロファイル レイアウトは異なります。プロファイルのレイアウトが異なるということは、これら 2 つのユーザー タイプの登録フォームが、登録後のアプリケーションで異なるフォーム フィールドと異なるレイアウトを持つ必要があることを意味します。

登録後にユーザーを管理する方法については、(後でそれでよいかどうかはわかりませんが)わかったと思います。しかし今のところ、FOSUserBundle から拡張される 2 つの異なる登録フォームを作成する方法がわかりません。

私が理解している限り、FOSUB の構成には、登録が設定されているポイントが 1 つしかなく、複数の「登録:」を持つことはできません。

config.yml には次のものがあります。

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Company\UserBundle\Entity\User
    registration:
        confirmation: { enabled: true }

security.yml:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    main:
        pattern:  ^/
        form_login:
            provider: fos_userbundle
            csrf_provider:  form.csrf_provider
        logout:       true
        anonymous:    true

私の考えは、FOSUB を拡張する 3 つの異なるバンドルを作成することですが、ドキュメントによると、FOSUB を親として宣言できるのは 1 つのバンドルだけです。

別のオプション (ドキュメントから) は、すべての元のメソッドを実装する ContainerAware を拡張することです。しかし、この場合でも、app/config/{config|security|routing}.yml をどのように構成して、FOSUB とカスタム フォームを使用する /register_employee や /register_manager リンクを作成する必要があるかわかりません。

正しい方向に向けてください。ありがとう。

4

3 に答える 3

5

はい、それは可能です。しかし、それは複雑な手順になります。次のことができます(私は自分で試したことはありません:))

  • のようなルート パターンを作成し、それに応じてregisterAction/register/{type}を変更します。コントローラーのオーバーライドについては、このドキュメントをご覧ください。

  • registerActionメソッドで空のUserエンティティを作成し、ルート引数からタイプを設定します。$form->setData()それから、例えば [1]を呼び出します。

  • RegistrationFormTypeをオーバーライドして、 FormEvents::PRE_SET_DATAデータ イベントをリッスンするイベント リスナーを追加します。ここでは、タイプに基づいて動的にフォーム フィールドを追加します。この料理本のエントリを確認してください。

  • 次に検証部分です。ユーザー タイプごとに 2 種類の検証グループを作成します。送信されたデータに基づいて検証グループを動的に設定できます。ここで確認してください。

  • フォームの保存中に追加の操作を行いたい場合は、 のonSuccessメソッドをオーバーライドできますRegistrationFormHandlerこれを行うには、このドキュメントの下部を確認してください。

[1] このように、

public function registerAction()
{
    $form = $this->container->get('fos_user.registration.form');
    $user = new User();
    $form->setData($user);
    //.....
}

編集:

3番目のステップは機能しません。コントローラ アクションから型引数を渡すには、プロセスメソッドをオーバーライドする必要があります。RegistrationFormHandler

于 2012-05-05T14:37:37.707 に答える
4

FOSUserBundle は、ユーザーの認証を提供するためではなく、ユーザーを管理するためのものです。バンドルは、アプリケーションのユーザーを管理するためのより優れた構造を提供します。コードを見ると、デフォルトの登録やその他のユーザー アクティビティに使用されるコントローラーが見つかります。

理想的には、独自のコントローラーを作成し、バンドルを使用してユーザーの保存と取得のみを行います。これは、複数の登録/ログイン フォームを管理する場合に特に必要です。

FOSUserBundle をユーザーの管理のみに使用し、ユーザーの認証/登録には使用しないと考え始めると、状況がより明確になります。

SonataAdminBundle と FOSUserBundle の統合を提供するhttps://github.com/sonata-project/SonataUserBundleも参照してください。

于 2012-05-05T07:34:30.993 に答える
1

このバンドルhttps://github.com/PUGX/PUGXMultiUserBundleを確認してください。登録を含む複数のタイプのユーザーと連携するすべてのスタッフを提供します

于 2012-05-05T16:38:10.640 に答える