我试图通过在我的实体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
以便在管理类之外使用它吗?
答案 0 :(得分:1)
您需要在表单类型中注入管理池。
以下是一个例子:
#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')
;
答案 1 :(得分:0)
在the doc中写作时,您可以使用sonata.admin.pool
服务。
$configurationPool = $this->container->get('sonata.admin.pool');
答案 2 :(得分:0)
感谢@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" );
[...]
}