如何以表单类型访问 Sonata 管理池
How to access Sonata admin pool in form type
用例
我试图通过在我的实体 FormType 的 buildForm 方法中定义它来在我的网站的前端管理员中重用 sonata_type_model_list:
[...]
->add('position', 'sonata_type_model_list', array(
'model_manager' => $categoryManager,
))
[...]
但是我不能使用
$categoryAdmin = $this
->getConfigurationPool()
->getAdminByClass("\Application\Sonata\ClassificationBundle\Entity\Category");
因为我需要在 AdminClass 中才能使用 getConfigurationPool()
。
如果有人知道如何在 AdminClass 之外使用 getConfigurationPool()
或者您知道如何声明 sonata_type_model_list
以便在管理员之外使用它 class 吗?
写在the doc,也许你可以使用sonata.admin.pool
服务。
$configurationPool = $this->container->get('sonata.admin.pool');
您需要在您的表单类型中注入管理池。
这是一个例子:
#services.yml
blast_base_entities.form.type.my:
class: Blast\BaseEntitiesBundle\Form\Type\MyformType
tags:
- { name: form.type, alias: blast_search_index_autocomplete }
arguments: [@sonata.admin.pool]
并在表格中输入:
use Sonata\AdminBundle\Admin\Pool
Class MyFormType
{
private $adminPool;
public function construct(Pool $adminPool)
{
$this->adminPool = $adminPool;
}
}
然后你可以检索管理员
$this->adminPool->getAdminByClass('Foo')
;
解决方案
感谢@pbenard & @Mawcel他们的回答,我结合他们来实现我的目标如下:
在我的控制器中 我创建了我的表单并像这样注入 $this->container->get('sonata.admin.pool')
:
$form = $this->createForm(
new FormType($this->container->get('sonata.admin.pool')),
$entity,
$options
);
在我的 formType 中,我添加了 属性 $adminPool && __construct 方法:
private $adminPool;
public function __construct(Pool $adminPool) {
$this->adminPool = $adminPool;
}
所以我现在可以从 buildForm 方法访问 adminPool:
public function buildForm(FormBuilderInterface $builder, array $options)
{
[...]
$categoryAdmin = $this
->getConfigurationPool()
->getAdminByClass("\Application\Sonata\ClassificationBundle\Entity\Category" );
[...]
}
用例
我试图通过在我的实体 FormType 的 buildForm 方法中定义它来在我的网站的前端管理员中重用 sonata_type_model_list:
[...]
->add('position', 'sonata_type_model_list', array(
'model_manager' => $categoryManager,
))
[...]
但是我不能使用
$categoryAdmin = $this
->getConfigurationPool()
->getAdminByClass("\Application\Sonata\ClassificationBundle\Entity\Category");
因为我需要在 AdminClass 中才能使用 getConfigurationPool()
。
如果有人知道如何在 AdminClass 之外使用 getConfigurationPool()
或者您知道如何声明 sonata_type_model_list
以便在管理员之外使用它 class 吗?
写在the doc,也许你可以使用sonata.admin.pool
服务。
$configurationPool = $this->container->get('sonata.admin.pool');
您需要在您的表单类型中注入管理池。
这是一个例子:
#services.yml
blast_base_entities.form.type.my:
class: Blast\BaseEntitiesBundle\Form\Type\MyformType
tags:
- { name: form.type, alias: blast_search_index_autocomplete }
arguments: [@sonata.admin.pool]
并在表格中输入:
use Sonata\AdminBundle\Admin\Pool
Class MyFormType
{
private $adminPool;
public function construct(Pool $adminPool)
{
$this->adminPool = $adminPool;
}
}
然后你可以检索管理员
$this->adminPool->getAdminByClass('Foo')
;
解决方案
感谢@pbenard & @Mawcel他们的回答,我结合他们来实现我的目标如下:
在我的控制器中 我创建了我的表单并像这样注入 $this->container->get('sonata.admin.pool')
:
$form = $this->createForm(
new FormType($this->container->get('sonata.admin.pool')),
$entity,
$options
);
在我的 formType 中,我添加了 属性 $adminPool && __construct 方法:
private $adminPool;
public function __construct(Pool $adminPool) {
$this->adminPool = $adminPool;
}
所以我现在可以从 buildForm 方法访问 adminPool:
public function buildForm(FormBuilderInterface $builder, array $options)
{
[...]
$categoryAdmin = $this
->getConfigurationPool()
->getAdminByClass("\Application\Sonata\ClassificationBundle\Entity\Category" );
[...]
}