5

管理フォームからいくつかのデフォルト フィールドを削除する必要があるためSonataUser/Admin/Model/UserAdmin、をオーバーライドしようとしています。そのため、バンドル内configureFormFields()のファイルをコピーして変更しました。次に、それをサービスとして宣言します。vendor/bundles/Sonata/UserBundle/Admin/Model/UserAdmin.phpapp/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php

# app/application/Sonata/UserBundle/Resources/config/services.yml
services:
    application_user.registration.form.type:
        class: Application\Sonata\UserBundle\Admin\Model\UserAdmin
        arguments: [%sonata_user.model.user.class%]
        tags:
            - { name: form.type, alias: application_user_admin }

今の質問:私は正しくやっていますか?ソナタ管理者にそれを使用するように指示するにはどうすればよいですか?

4

2 に答える 2

16

オーバーライド クラスは config.yml で設定する必要があります。

# app/config/config.yml
sonata_user:
  admin:
    user:
      class:      MyCompany\UserBundle\Admin\Model\UserAdmin

元の UserAdmin を拡張します。

namespace MyCompany\UserBundle\Admin\Model;

use Sonata\AdminBundle\Form\FormMapper;

class UserAdmin extends \Sonata\UserBundle\Admin\Model\UserAdmin
{

    protected function configureFormFields(FormMapper $formMapper)
    {
        // new logic
    }

}

もちろんMyCompany\UserBundle\Admin\Model\UserAdmin、バンドル構造を反映するようにクラス名を変更してください。

于 2013-12-31T12:26:44.143 に答える
2

代わりに、バンドルを src ディレクトリに保持することをお勧めします (バンドルの作成セクションを参照してください)。この場合、easy extends を使用している場合は--dest=src、src/ の Application 名前空間内にバンドルを生成するために必ず使用してください。

php app/console sonata:easy-extends:generate SonataUserBundle --dest=src

でオーバーライド バンドルを作成しsrc/Application/Sonata/UserBundle、ベンダー バンドルを親として登録することで、新しいサービスを作成する必要がなくなります。これは、バンドルを適切にオーバーライドする方法を説明しています。バンドルをオーバーライドすると、多くの時間を節約できます。

親バンドルと同じ場所にオーバーライドするファイルを作成することを忘れないでください。あなたの場合、SonataUser/Admin/Model/UserAdmin.phpベンダーからバンドルにコピーして貼り付けsrc/Application/Sonata/UserBundle/Admin/Model/UserAdmin.php、必要に応じて変更する必要があります。そのため、バンドルのオーバーライドが非常に便利な場合があります。

于 2012-07-10T13:17:02.783 に答える