1

必要なアクティブ ユーザー フィールドを持つエンティティがあるため、アクティブ ユーザーの名前を に追加する必要がありますconfigureFormFields()

class DokumentAdmin extends Admin
{    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
                ->add('email')
                 ...
                ->add('user_name',null,array('required' => true, 'data' => "THIS IS A LOGGED ADMIN NAME"))
        ;
    }

リスナーを使用しようとしましたが、

public function prePersist(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        if ($entity instanceof Dokument) {
         //set user name

        }
    }

しかし、ここでコンテナ オブジェクトをどのように使用するかはわかりません。

4

3 に答える 3

3

コンテナを注入できます:

次のことを試してください。

class DokumentAdmin extends Admin {

private $container = null;

/**
 * @param string $code
 * @param string $class
 * @param string $baseControllerName
 */
public function __construct($code, $class, $baseControllerName, $container=null)
{
    parent::__construct($code, $class, $baseControllerName);
    $this->container = $container;  
}
....

service.yml に @service_container to admin エントリを入力します。

acme.demo.document:
      class: Acme\DemoBundle\Admin\DocumentAdmin
      tags:
      arguments: [null, Acme\Demobundle\Entity\Document, ApplicationAcmeDemoBundle:Default, @service_container]

それでおしまい。これで、管理者クラスのコンテナーにアクセスできるようになりました。

于 2013-01-28T12:55:23.480 に答える
0

同じ問題があります。config.yml からいくつかのパラメーターを解析する必要がありますが、失敗します。

解決策として、コンテナを管理者クラスに注入できますが、これは推奨されません。必要なサービスまたはパラメーターのみを注入する必要があります。

実行する方法 ?

コンストラクト注入の代わりにセッター注入を使用する必要があります。

snata Admin クラスにパラメーターを挿入する例を次に示します。

管理サービスを定義するときは、次のような呼び出しを追加するだけです:

<service id="skonsoft.znata.admin.keyword" class="%skonsoft.znata.admin.keyword.class%">
        <tag name="sonata.admin" manager_type="orm" group="Keyword" label="Keyword"/>
        <argument />
        <argument>%skonsoft.znata.admin.keyword.entity.class%</argument>
        <argument>SonataAdminBundle:CRUD</argument>
        <call method="setTranslationDomain">
            <argument>SkonsoftZnataBundle</argument>
        </call>

         <!-- here you inject your parameter using setter injection -->
        <call method="setEnabledLocales">
            <argument>%skonsoft_znata.locales%</argument>
        </call>
    </service>

その後、次のような管理クラス内に setEnabledLocales というメソッドを追加するだけです

public function setEnabledLocales($locales){
    $this->enabedLocales = $locales;
}

$enabedLocales を管理クラスのプロパティとして追加することを忘れないでください。

最後に、このプロパティを使用できます。

于 2012-09-01T00:36:03.183 に答える