2012-12-25 1 views
0

현재 FOSRestBundle과 함께 Symfony2를 사용하여 RESTful API를 개발 중입니다.FOSRestBundle 및 Mongodb 커서 객체를 json으로

나는 Mongodb를 좋아한다. 그래서 나는 그것을 구현했다. 여기에 내 usercontroller의 발췌 문장이있다.

/** 
    * @return View view instance 
    * @View() 
    */ 
    public function allAction() { 
    $users = $this->get('doctrine_mongodb') 
     ->getRepository('FantasytdUserBundle:User') 
     ->findByUsername('Elvar'); 

    return $users; 
    } 

그래서 나는 데이터베이스에서 결과를 산출하는 사용자를 찾고 있습니다. mysql 데이터베이스에서이 작업을 수행했다. 그러나 mongodb의 경우, get 메소드는 Cursor 객체를 반환하고, 반환 될 때 이와 같은 것을 얻습니다.

[{"message":"[Semantical Error] Annotation @Secure is not allowed to be declared on class JMS\\SecurityExtraBundle\\Annotation\\Secure. You may only use this annotation on these code elements: METHOD.","class":"Doctrine\\Common\\Annotations\\AnnotationException","trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":"\/Users\/Elvar\/Projects\/fantasytd\/backend\/vendor\/doctrine\/common\/lib\/Doctrine\/Common\/Annotations\/AnnotationException.php","line":52,"args":[]}, 

그리고 계속됩니다.

어떻게 이러한 커서 개체에 접근해야합니까?

+0

'Secure (roles = "ROLE_ADMIN")'주석을 사용하여 전체 컨트롤러를 보안하려고하면, 얻은 에러는 Symfony 2.1에서 발생합니다. 대신 @PreAuthorize ("hasRole ('ROLE_ADMIN')")'을 사용하십시오 (http://stackoverflow.com/a/12001097/601386 참조). – flu

+0

@PreAuthorize를 사용한다면'jms_security_extra :'에서 설정에'expressions : true'을 추가하는 것을 잊지 마십시오. 디폴트는'false'입니다. – flu

답변

2

FindOneByUsername()을 사용하면 문제가 해결되므로 결과가 하나의 결과 만 나오면 작동하는 것 같습니다.

여러 결과가 필요한 경우이를 반복하여 해결할 수 있습니다. 커서 객체 - "> toArray()"- 대신, 우리가 사용하고있는 foreach는 루프와 목록을 실행

public function allAction() { 
    $usersQ = $this->get('doctrine_mongodb') 
     ->getRepository('FantasytdUserBundle:User') 
     ->findByUsername('Elvar'); 

    foreach ($usersQ as $user) { 
     $users[] = $user; 
    } 

    return $users; 
    } 
1

그냥 조금 간단. iterator_to_array()도 트릭을 수행해야한다고 생각합니다.