关于symfony:在admin类(而非控制器类)中使用getParameter()

Using getParameter() in admin class (not controller class)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace Acme\\AdminBundle\\Admin;

use Sonata\\AdminBundle\\Admin\\Admin;
use Sonata\\AdminBundle\\Form\\FormMapper;
use Sonata\\AdminBundle\\Datagrid\\DatagridMapper;
use Sonata\\AdminBundle\\Datagrid\\ListMapper;
use Sonata\\AdminBundle\\Show\\ShowMapper;
use FOS\\UserBundle\\Model\\UserManagerInterface;

class LessonAdmin extends Admin
{
    public function
    {
         //I have tried these, but in vain.
         $items = $this->container->getParameter('items');
         or
         $items = $this->getContainer()->getParameter('items');

我认为这个问题与依赖注入有关,但我仍然不清楚。
我如何在这里注入getContainer项目?


在SonataAdmin中,可以从Admin配置池中获取DI容器:

1
2
3
4
5
6
7
8
9
10
11
<?php
use Sonata\\AdminBundle\\Admin\\Admin;

class YourAdmin extends Admin
{

    protected function yourAdminMethod()
    {
        $this->getConfigurationPool()->getContainer()->getParameter('your_parameter');
    }
}

`


您还可以通过管理服务定义中的setter注入参数:

1
2
3
4
5
6
7
8
9
10
11
services:
    sonata.admin.lesson:
        class: Acme\\AdminBundle\\Admin\\LessonAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, ...}
        arguments:
            - ~
            - Acme\\AppBundle\\Entity\\Lesson
            - ~
        calls:
           - [ setItems, ["%items%"]]

在您的管理类中:

1
2
3
4
5
6
class LessonAdmin extends Admin
{
    public function setItems($items)
    {
        $this->items = $items;
    }

通过这种方式,您的参数可以在整个admin类中访问。