如何在管理员 class 中访问 Symfony Sonata 中的配置池?
How can I access the configuration pool in Symfony Sonata in the Admin class?
我有一个 select(或选择)字段,它应该从 returns 一个数组的函数中获取所有选项。
这是定义选择字段的行;
->add('possibilities', 'choice', array('choices' => Crud::enumStatus()))
这是 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'))))
和上面提到的class中的函数相同;
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;
}
尝试我想要的时出错;
Attempted to call method "getConfigurationPool" on class
"Xx\Yyy\QqqBundle\Controller\OrderController".
错误消息中提到的控制器是 ->add() 用于我的表单的控制器,而不是这两个函数所在的控制器。
为什么第一个可以,第二个不行?有人可以向我解释一下吗?是不是和one函数中的static
有关?我该如何解决这个问题?什么是 configurationPool 以及如何获取它?
我使用 Sonata Admin Bundle 和 Symfony。
请看看这个official doc。
ConfigurationPool => configuration pool where all Admin class instances
are stored
$this->getConfigurationPool()
我认为是来自管理员的复制粘贴 class。
为了访问扩展 CRUDController
内的配置池,您必须通过他的 admin
属性.
访问
$this->admin->getConfigurationPool()
这是您的函数的头部:
public function getUsers($roles)
{
$queryBuilder = $this->admin->getConfigurationPool()->getContainer()->get('doctrine')->getManager('admin')
->createQueryBuilder();
更新:
如果你的控制器是一个简单的 symfony 控制器,那么你只需要调用 doctrine 而不是抛出管理员...
$queryBuilder = $this->get('doctrine')->getManager('admin')
->createQueryBuilder();
我有一个 select(或选择)字段,它应该从 returns 一个数组的函数中获取所有选项。
这是定义选择字段的行;
->add('possibilities', 'choice', array('choices' => Crud::enumStatus()))
这是 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'))))
和上面提到的class中的函数相同;
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;
}
尝试我想要的时出错;
Attempted to call method "getConfigurationPool" on class "Xx\Yyy\QqqBundle\Controller\OrderController".
错误消息中提到的控制器是 ->add() 用于我的表单的控制器,而不是这两个函数所在的控制器。
为什么第一个可以,第二个不行?有人可以向我解释一下吗?是不是和one函数中的static
有关?我该如何解决这个问题?什么是 configurationPool 以及如何获取它?
我使用 Sonata Admin Bundle 和 Symfony。
请看看这个official doc。
ConfigurationPool => configuration pool where all Admin class instances are stored
$this->getConfigurationPool()
我认为是来自管理员的复制粘贴 class。
为了访问扩展 CRUDController
内的配置池,您必须通过他的 admin
属性.
$this->admin->getConfigurationPool()
这是您的函数的头部:
public function getUsers($roles)
{
$queryBuilder = $this->admin->getConfigurationPool()->getContainer()->get('doctrine')->getManager('admin')
->createQueryBuilder();
更新:
如果你的控制器是一个简单的 symfony 控制器,那么你只需要调用 doctrine 而不是抛出管理员...
$queryBuilder = $this->get('doctrine')->getManager('admin')
->createQueryBuilder();