В настоящее время я работаю над RESTful API, используя Symfony2 с FOSRestBundle.
Мне нравится 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":[]},
И это продолжается.
Как мне подойти к этим объектам курсора?
По-видимому, он работает, если результат дает только один результат, поэтому использование FindOneByUsername () решает проблему.
Если вам нужен множественный результат, я решил его, зациклив.
public function allAction() { $usersQ = $this->get('doctrine_mongodb') ->getRepository('FantasytdUserBundle:User') ->findByUsername('Elvar'); foreach ($usersQ as $user) { $users[] = $user; } return $users; }
Вместо прогона списка с циклом foreach мы используем «-> toArray ()» в объекте Cursor – это немного проще. Я считаю, что iterator_to_array () должен делать трюк.