2016-07-19 5 views
2

배열을 반환하는 함수에서 모든 옵션을 가져와야하는 select (또는 choice) 필드가 있습니다.Admin 클래스의 Symfony Sonata에서 구성 풀에 어떻게 액세스합니까?

이것은 선택 필드를 정의하는 라인입니다.

->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')))) 

그리고 위에서 언급 한 것과 동일한 클래스의 기능.

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;   
} 

오류 내가 원하는 걸하려고 할 때;

클래스 "XX \ YYY \ QqqBundle \ 컨트롤러 \ OrderController"의 "getConfigurationPool"메소드를 호출하는 시도했습니다.

오류 메시지에서 언급 한 컨트롤러는 두 가지 기능이 아닌 -> add()가 내 양식 용 컨트롤러입니다.

첫 번째 작품은 효과가 있지만 두 번째 작품은 효과가없는 이유는 무엇입니까? 누군가 제게 이것을 설명해 주시겠습니까? 하나의 기능에서 static과 관련이 있습니까? 그리고이 문제를 어떻게 해결할 수 있습니까? configurationPool은 무엇이며 어떻게 구성합니까?

나는 Sonata Admin Bundle과 Symfony를 사용합니다.

+0

죄송합니다. 결국 너무 많은 질문을합니다. 선택 사항을 수정하고 getUsers 메소드 및 "getConfigurationPool"오류에서 올바른 정보를 검색하는 방법에 대해 설명하겠습니다. –

+0

'구성 풀에 액세스하는 방법'이란 제목으로 질문하지 않아야합니까? – pbenard

+0

그래, 그 소리가 더 좋아. 그것을 바꿀 것입니다. –

답변

1

이 부분을 보시고 official doc을 방문하십시오.

$this->getConfigurationPool() 저장됩니다 모든 관리 클래스 인스턴스 내가 생각

ConfigurationPool => 구성 풀은 관리 클래스의 복사 붙여 넣기입니다.

확장 풀 CRUDController에서 구성 풀에 액세스하려면 admin 속성으로 액세스해야합니다.

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

UPDATE : 여기

$this->admin->getConfigurationPool() 

은 함수의 머리

방금 ​​대신 교리 호출 할 필요가 귀하의 컨트롤러가 간단한 심포니 컨트롤러 인 경우 관리자 던지기 ...

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

방금 ​​시도했지만 작동하지 않습니다. 이 함수는 CRUDController가 아닌 Sonata의 관리자에서 확장 한 자체 관리 클래스에 있습니다. getUser 함수를 사용하는 일부 관리 클래스에서는 완벽하게 작동합니다. –

+0

당신의 오류가 OrderController에 있다고 말하기 때문에 이상하다. – pbenard

+0

네, OrderController의 메소드를 호출하고 그 메소드는 Admin 클래스에 위치합니다. 내 컨트롤러는 CRUDController에서 확장되지 않고 Symfony의 컨트롤러에서 확장됩니다. 나는 왜 그런지 모르지만 이것은 단지 이전 고용주가 그것을 얻은 방법입니다. 그리고 지금 그것을 바꾸는 것은 좋은 생각이 아닙니다. –