ezzarghili
ezzarghili

Reputation: 198

Getting empty response when returning JSON data using jsonModel on Doctrine result - Special characters encoding issue

I am having problems getting ZF2 jsonModel to return multi result from doctrine query. The issue appears only when I try to return the array result and not when returning individual items my code is as below:

public function mosquesAction() {

    $em = $this
            ->getServiceLocator()
            ->get('Doctrine\ORM\EntityManager');
    $dql = "select m.name from \Application\Entity\Mosque m ";
    $result = $em->createQuery($dql)->getResult();

    return new JsonModel($result);   
}

the Mosque Entity is:

namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class Mosque {

/**
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\Column(type="integer")
 */
private $id;

/** @ORM\Column(type="string") */
private $name;

/** @ORM\Column(type="string") */
private $address;

/** @ORM\Column(type="string") */
private $email;

/** @ORM\Column(type="string") */
private $website;

/** @ORM\Column(type="string") */
private $phone;

/** @ORM\Column(type="string") */
private $mobile;

/** @ORM\Column(type="string") */
private $fax;

/** @ORM\Column(type="string") */
private $coordinates;

/** @ORM\ManyToOne(targetEntity="Canton", inversedBy="mosques") */
private $canton;

public function getId() {
    return $this->id;
}

public function getName() {
    return $this->name;
}

public function setName($name) {
    $this->name = $name;
}

}

when I change the return value to

return new JsonModel($result[0])

I get the result

{"name":"IDTV - Mimar Sinan Camii"}

EDIT:

I think I found the origin of the issue, there is no problem with code I posted but it appears that JsonModel can't handle special characters like in

Islamische König Faysal Stiftung

So my question now is, how to encode these characters in JsonModel on php5.3?

Thank you in advance and sorry for my poor English

Upvotes: 3

Views: 1102

Answers (1)

ezzarghili
ezzarghili

Reputation: 198

After playing with different options I got to the result that the issue resides in doctrine connection to MySQL database, So I changed my database collation to _utf8_general_i_ and added some parameters to the driver params:

'charset' => 'utf8',
'driverOptions' => array(
     1002 => 'SET NAMES utf8'
)

now I get the result I was expecting

{
    "id": 2,
    "name": "Föderation Islamischer Gemeinschaften LU",
    "address": "Hauptstrasse 58",
    "email": "",
    "website": "",
    "phone": "041 260 90 98",
    "mobile": "",
    "fax": "",
    "coordinates": "47.0666986,8.2812254"
}

Upvotes: 5

Related Questions