我有一个具有必需活动用户字段的实体,因此我需要在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
}
}
但我现在不在这里使用容器对象。
答案 0 :(得分:5)
您可以使用如下容器:
$this->getConfigurationPool()->getContainer();
例如:
protected function configureFormFields(FormMapper $formMapper)
{
$container = $this->getConfigurationPool()->getContainer();
...
// Using the container here...
}
答案 1 :(得分: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到admin条目。
acme.demo.document:
class: Acme\DemoBundle\Admin\DocumentAdmin
tags:
arguments: [null, Acme\Demobundle\Entity\Document, ApplicationAcmeDemoBundle:Default, @service_container]
就是这样。现在您可以访问管理类中的容器了。
答案 2 :(得分: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作为属性。
最后你可以使用这个属性。