2016-09-10 4 views
2

私はSonata User Bundleのユーザーを作成します。セクション2.5 Extending the Bundleのドキュメントによれば、彼らは私のユーザーとグループのエンティティの完全な新しいバンドルを生成したいと思っています。私はこれが完全に不要で、余分なバンドルは欲しくないと思います。だから、私は自分のAppBundleにユーザーとグループのエンティティを作成し、Sonata \ UserBundle \ Entity \ BaseUserエンティティからそれらを拡張します。Sonataユーザーサービスメニューグループを上書きする

この後、私はfos_userのuser_classとgroup_classを新しいエンティティに変更しました。メニューで

fos_user: 
    db_driver:  orm 
    firewall_name: main 
    user_class:  AppBundle\Entity\User 

    group: 
     group_class: AppBundle\Entity\Group 
     group_manager: sonata.user.orm.group_manager 

    service: 
     user_manager: sonata.user.orm.user_manager 

すべてが完璧に、私のデータベースの私のユーザーとグループのテーブルが正しく生成されて、私はFOSユーザコマンドラインを使用してユーザーを作成することができ、そして私は、ログインすることができます動作します。

は自動的にありユーザおよびグループのエンティティを含む、生成されたユーザグループです(下の画像を参照)。ここで唯一問題となるのは、このエンティティのサービスを自分自身のエンティティクラスを使用するようにオーバーライドすることです。なぜなら、そのうちの1つをクリックすると、必要のない拡張バンドル内のエンティティが必要になるからです。ソナタに私自身のサービスを利用するように指示するにはどうすればよいですか?または、ユーザー(ユーザーとグループを含む)を完全に削除または非表示にするにはどうすればよいですか?

enter image description here

答えて

1

はソナタユーザーバンドルファイル内のいくつかの掘削後、私は、エンティティは、パラメータで設定することができていることがわかります。だから私がしなければならなかったことは、追加することでした。

parameters: 
    sonata.user.admin.user.entity: AppBundle\Entity\User 
    sonata.user.admin.group.entity: AppBundle\Entity\Group 

(config.ymlファイル)

1

"また、ユーザー(ユーザーとグループ)を完全に削除または非表示にするにはどうすればよいですか?

私たちはSonataUserBundleとAppBundleを持っています。 両方とも、ユーザーとグループのエンティティがあります。ソナタのエンティティを使用することは望ましくありません。しかし、SonataUserBundleにはすでにUserAdminクラスとGroupAdminクラスがあります。 なぜ、管理メニューにSonataUserBundleをインストールした後、2つのサービス現れだということ:あなたが知っているように、我々はservices.ymlファイルで宣言するすべてのソナタ管理クラスを

enter image description here

を。 はSonataUserBundleでは、ソナタの開発者がでサービスを宣言し、別のファイルを、持っている教義のORMを使用した場合には、我々はこのパスにあるadmin_orm.xmlファイルをご覧ください:。

vendor/sonata-project/user-bundle/Resources/config/admin_orm.xml 

我々は見つけることができますファイルインサイド

<?xml version="1.0" encoding="UTF-8"?> 
<container xmlns="http://symfony.com/schema/dic/services"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://symfony.com/schema/dic/services  http://symfony.com/schema/dic/services/services-1.0.xsd"> 
    <parameters> 
    <parameter  key="sonata.user.admin.groupname">sonata_user</parameter> 
     <parameter  key="sonata.user.admin.label_catalogue">SonataUserBundle</parameter> 
     <parameter key="sonata.user.admin.groupicon"><![CDATA[<i class='fa fa-users'></i>]]></parameter> 
</parameters> 
<services> 
    <service id="sonata.user.admin.user" class="%sonata.user.admin.user.class%"> 
     <tag name="sonata.admin" manager_type="orm" group="%sonata.user.admin.groupname%" label="users" label_catalogue="%sonata.user.admin.label_catalogue%" label_translator_strategy="sonata.admin.label.strategy.underscore" icon="%sonata.user.admin.groupicon%"/> 
     <argument/> 
     <argument>%sonata.user.admin.user.entity%</argument> 
     <argument>%sonata.user.admin.user.controller%</argument> 
     <call method="setUserManager"> 
      <argument type="service" id="fos_user.user_manager"/> 
     </call> 
     <call method="setTranslationDomain"> 
      <argument>%sonata.user.admin.user.translation_domain%</argument> 
     </call> 
    </service> 
    <service id="sonata.user.admin.group" class="%sonata.user.admin.group.class%"> 
     <tag name="sonata.admin" manager_type="orm" group="%sonata.user.admin.groupname%" label="groups" label_catalogue="%sonata.user.admin.label_catalogue%" label_translator_strategy="sonata.admin.label.strategy.underscore"/> 
     <argument/> 
     <argument>%sonata.user.admin.group.entity%</argument> 
     <argument>%sonata.user.admin.group.controller%</argument> 
     <call method="setTranslationDomain"> 
      <argument>%sonata.user.admin.group.translation_domain%</argument> 
     </call> 
    </service> 
</services> 

あなたがここに私たちのサービスのIDS見ることができるように:

をUSERADMINとGroupAdmin - 管理サービスの宣言0
sonata.user.admin.user 
sonata.user.admin.group 

これらを上書きする最も簡単な方法は、services.ymlファイルで同じサービス(このIDを使用することを意味します)を作成することです。 はい、あなたは私と一緒に議論をすることができます、この方法は愚かですが、私が言ったように、それは唯一ではありません。OUR services.ymlの意志で

だから、ソナタのサービスは、次のようになります。

sonata.user.admin.user: 
    class: "%sonata.user.admin.user.class%" 
    arguments: [~, "%sonata.user.admin.user.entity%", "%sonata.user.admin.user.controller%"] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "users", icon: "<i class=\"fa fa-users\"></i>" } 
    calls: 
     - [ setUserManager, [ "@fos_user.user_manager" ] ] 
     - [ setTranslationDomain, [ "%sonata.user.admin.user.translation_domain%" ] ] 

sonata.user.admin.group: 
    class: "%sonata.user.admin.group.class%" 
    arguments: [~, "%sonata.user.admin.group.entity%", "%sonata.user.admin.group.controller%"] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "groups" } 
    calls: 
     - [ setTranslationDomain, [ "%sonata.user.admin.group.translation_domain%" ] ] 

今、あなたは管理ダッシュボードを更新し、何も起こらなかったことを、見ることができます。しかし、私たちの目的は、ダッシュボードとメニューからこのサービスを無効にすることでした。そのトリックをやりましょう。このサービスの宣言にservices.ymlを追加すると、

show_in_dashboard: false 
tags: 
     - { show_in_dashboard: false, name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "users", icon: "<i class=\"fa fa-user\"></i>" } 

が表示されます。

したがって、私たちのサービスは、次のようになります。この些細な操作・ソナタサービス後

sonata.user.admin.user: 
    class: "%sonata.user.admin.user.class%" 
    arguments: [~, "%sonata.user.admin.user.entity%", "%sonata.user.admin.user.controller%"] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "users", icon: "<i class=\"fa fa-user\"></i>", show_in_dashboard: false } 
    calls: 
     - [ setUserManager, [ "@fos_user.user_manager" ] ] 
     - [ setTranslationDomain, [ "%sonata.user.admin.user.translation_domain%" ] ] 

sonata.user.admin.group: 
    class: "%sonata.user.admin.group.class%" 
    arguments: [~, "%sonata.user.admin.group.entity%", "%sonata.user.admin.group.controller%"] 
    tags: 
     - { name: sonata.admin, manager_type: orm, group: "%sonata.user.admin.groupname%", label_catalogue: "%sonata.user.admin.label_catalogue%", label: "groups", show_in_dashboard: false } 
    calls: 
     - [ setTranslationDomain, [ "%sonata.user.admin.group.translation_domain%" ] ] 

を完全に自分のダッシュボードから消えます。