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

5

您可以使用以下容器:

$this->getConfigurationPool()->getContainer();

例如:

protected function configureFormFields(FormMapper $formMapper)
{
    $container = $this->getConfigurationPool()->getContainer();
    ...
    // Using the container here...
}
于 2013-08-06T10:09:22.830 回答
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 到管理员条目。

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 解析一些参数,但它失败了。

作为解决方案,您可以将容器注入您的管理类,但这不是推荐的。您应该只注入您需要的服务或参数。

怎么做 ?

您应该使用 setter 注入而不是构造注入。

这是在 snata Admin Class 中注入参数的示例:

当您定义您的管理服务时,只需添加如下调用:

<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 回答