Php 如何在Admin类中访问Symfony Sonata中的配置池?

Php 如何在Admin类中访问Symfony Sonata中的配置池?,php,symfony,sonata-admin,symfony-sonata,Php,Symfony,Sonata Admin,Symfony Sonata,我有一个select(或choice)字段,它应该从返回数组的函数中获取所有选项 这是定义选项字段的行 ->add('possibilities', 'choice', array('choices' => Crud::enumStatus())) 这是枚举状态函数 public static function enumStatus() { return array( '1' => 'Awaiting Approval', '2' =&

我有一个select(或choice)字段,它应该从返回数组的函数中获取所有选项

这是定义选项字段的行

->add('possibilities', 'choice', array('choices' => Crud::enumStatus()))
这是枚举状态函数

public static function enumStatus()
{
    return array(
        '1' => 'Awaiting Approval',
        '2' => 'Partly Approved',
        '3' => 'Approved',
        '4' => 'Disapproved',
        '5' => 'Complete'
    );
}

我上面解释的非常有效。但我真正想要的并没有用。校长们保持不变

这就是我想要的

->add('possibilities', 'choice', array('choices' => Crud::getUsers(array('Marketing', 'Human Resource Management'))))
以及与上述同一类中的函数

public function getUsers($roles)
{
    $queryBuilder = $this->getConfigurationPool()->getContainer()->get('doctrine')->getManager('admin')
            ->createQueryBuilder();                

    $queryBuilder->select('u.id, u.name')
                         ->from('Qi\Bss\BaseBundle\Entity\Admin\User', 'u')
                         ->innerJoin('u.businessRoles', 'r')
                         ->where('r.name IN (:roles)')
                         ->setParameter('roles', $roles)
                         ->orderby('u.name');        
    $result = $queryBuilder->getQuery()->getResult();       

    $users = array();
    foreach ($result as $key => $value) {
        $users[$value['id']] = $value['name'];
    }

    return $users;        
}

尝试我想要的东西时的错误

->add('possibilities', 'choice', array('choices' => Crud::getUsers(array('Marketing', 'Human Resource Management'))))
试图对类调用方法“getConfigurationPool” “Xx\Yyy\qqbundle\Controller\OrderController”

错误消息中提到的控制器是->add()用于我的表单的控制器,而不是这两个函数所在的控制器

为什么第一个有效,而第二个无效?谁能给我解释一下吗?这是否与one函数中的
静态
有关?那么我该如何解决这个问题呢?什么是配置池以及如何获得它


我使用Sonata管理包和Symfony。

请看一下这个

ConfigurationPool=>所有管理类实例所在的配置池 储存

$this->getConfigurationPool()
我认为这是来自Admin类的复制粘贴

为了访问扩展
CRUDController
中的配置池,您必须通过他的
admin
属性进行访问

$this->admin->getConfigurationPool()
以下是您职能的负责人:

public function getUsers($roles)
{
    $queryBuilder = $this->admin->getConfigurationPool()->getContainer()->get('doctrine')->getManager('admin')
            ->createQueryBuilder(); 

更新

如果你的控制器是一个简单的symfony控制器,那么你只需要调用doctrine,而不是抛出admin

$queryBuilder = $this->get('doctrine')->getManager('admin')
            ->createQueryBuilder();

对不起,我最后问的问题太多了。让我们继续讨论如何修复选择并从getUsers方法和“getConfigurationPool”错误中检索正确的信息。您的问题不应该标题为“如何访问配置池?”好的,是的,听起来更好。我会改变的。我刚试过,但不起作用。该函数在我自己的admin类中,是从Sonata的admin扩展而来的,而不是CRUDController。在我使用getUser函数的一些管理类中,它工作得非常好。奇怪的是,因为您的错误说它在OrderControlleries中,所以我调用OrderController中的方法,而该方法位于admin类中。我的控制器不是从CRUDController扩展而来,而是从Symfony的控制器扩展而来。我不知道为什么会这样,但这正是我从以前的雇主那里得到的。现在改变它不是一个好主意。