php - Symfony and doctrine getting null response from sql database query -


how query mysql db? reason not getting response expect below.

i have message table messagebody column get.

i trying return array of json formatted objects.

/**  * @route("/api/messages")  * @template()  */ public function messagesgetaction() {      $repository = $this->getdoctrine()->getrepository('appbundle:message');     $messagesarr = $repository->findby(array('messagebody'=>'messagebody'));     $messages = json_encode($messagesarr);      return new response($messages);  } 

this returned

[{},{},{}] 

my question how build proper controller return api json response?

message entity

<?php  namespace appbundle\entity;  use doctrine\orm\mapping orm;  /**  * @orm\entity  * @orm\table(name="message")  */ class message {      /**      * @var integer      */     private $id;      /**      * @var string      */     private $fromuser;      /**      * @var string      */     private $touser;      /**      * @var string      */     private $messagetitle;      /**      * @var string      */     private $messagebody;       /**      * id      *      * @return integer       */     public function getid()     {         return $this->id;     }      /**      * set fromuser      *      * @param string $fromuser      * @return message      */     public function setfromuser($fromuser)     {         $this->fromuser = $fromuser;          return $this;     }      /**      * fromuser      *      * @return string       */     public function getfromuser()     {         return $this->fromuser;     }      /**      * set touser      *      * @param string $touser      * @return message      */     public function settouser($touser)     {         $this->touser = $touser;          return $this;     }      /**      * touser      *      * @return string       */     public function gettouser()     {         return $this->touser;     }      /**      * set messagetitle      *      * @param string $messagetitle      * @return message      */     public function setmessagetitle($messagetitle)     {         $this->messagetitle = $messagetitle;          return $this;     }      /**      * messagetitle      *      * @return string       */     public function getmessagetitle()     {         return $this->messagetitle;     }      /**      * set messagebody      *      * @param string $messagebody      * @return message      */     public function setmessagebody($messagebody)     {         $this->messagebody = $messagebody;          return $this;     }      /**      * messagebody      *      * @return string       */     public function getmessagebody()     {         return $this->messagebody;     } } 

routing

## api routes app_getmessages:    pattern: /api/messages   defaults: { _controller: appbundle:default:messages} 

database

enter image description here

new code:

/**  * @route("/api/messages")  * @template()  */ public function messagesgetaction() {      $repository = $this->getdoctrine()->getrepository('xygamingbundle:message');     $messagesarr = $repository->findall();     $json = new jsonresponse($messagesarr);      if (!$json) {         throw $this->createnotfoundexception(             'no messages found'         );     }      return new response($json);  } 

solution

// add controller use symfony\component\serializer\serializer; use symfony\component\serializer\encoder\xmlencoder; use symfony\component\serializer\encoder\jsonencoder; use symfony\component\serializer\normalizer\getsetmethodnormalizer;  /**  * @route("/api/messages")  * @template()  */ public function messagesgetaction() {      //$serializer = $container->get('jms_serializer');     // $serializer->serialize($data, $format);     // $data = $serializer->deserialize($inputstr, $typename, $format);      $encoders = array(new xmlencoder(), new jsonencoder());     $normalizers = array(new getsetmethodnormalizer());     $serializer = new serializer($normalizers, $encoders);      $repository = $this->getdoctrine()->getrepository('xygamingbundle:message');     $data = $repository->findall();      //$json = $serializer->serialize($data, 'json');      $json = $serializer->serialize($data, 'json');      //$json = new jsonresponse($messagesarr);      if (!$json) {         throw $this->createnotfoundexception(             'no messages found'         );     }      return new response($json);  } 

thanks guys

here seems problem happens in json_encode part, because json_encode not know how access private property, nor knows how use getter.

for can use symfony serializer documentation it or jmsserializer bundle (if you're building complex api, sooner or later needs it)

also can use new jsonresponse($yourobject) json_encode , setting http headers (otherwise if use response , json still advertized browser being text/html )


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -