ezz*_*ili 3 php json doctrine-orm zend-framework2
我在获取ZF2 jsonModel从教义查询返回多结果时遇到问题。仅当我尝试返回数组结果时才出现此问题,而在返回单个项目时不出现此问题,代码如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
清真寺实体是:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我将返回值更改为
return new JsonModel($result[0])
Run Code Online (Sandbox Code Playgroud)
我得到结果
{“名称”:“ IDTV-Mimar Sinan Camii”}
我想我找到了问题的根源,我发布的代码没有问题,但似乎JsonModel无法处理特殊字符,例如
伊斯兰国王基金会
所以我现在的问题是,如何在php5.3的JsonModel中编码这些字符?
在此先感谢您,我的英语不好。
在使用了不同的选项之后,我发现问题出在与MySQL数据库的理论连接上,因此我将数据库排序规则更改为_utf8_general_i_,并向驱动程序参数添加了一些参数:
'charset' => 'utf8',
'driverOptions' => array(
1002 => 'SET NAMES utf8'
)
Run Code Online (Sandbox Code Playgroud)
现在我得到了期望的结果
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |