exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb
问题描述:
项目属于MVC设计模式,技术和框架采用了php5.6 + Yii2.0 + MongoDB。
在我从Controller中调用Model 的 findAll([]) 方法获取数据打印到屏幕上时,报错:
exception 'DOMException' with message 'Invalid Character Error' in /home/user/YiiProject/src/vendor/yiisoft/yii2/web/XmlResponseFormatter.php:94
Stack trace:
#0 /home/user/YiiProject/src/vendor/yiisoft/yii2/web/XmlResponseFormatter.php(94): DOMElement->__construct('$id')
#1 /home/user/YiiProject/src/vendor/yiisoft/yii2/web/XmlResponseFormatter.php(83): yii\web\XmlResponseFormatter->buildXml(Object(DOMElement), Array)
#2 /home/user/YiiProject/src/vendor/yiisoft/yii2/web/XmlResponseFormatter.php(63): yii\web\XmlResponseFormatter->buildXml(Object(DOMElement), Object(MongoId))
#3 /home/user/YiiProject/src/vendor/yiisoft/yii2/web/Response.php(925): yii\web\XmlResponseFormatter->format(Object(yii\web\Response))
#4 /home/user/YiiProject/src/vendor/yiisoft/yii2/web/Response.php(312): yii\web\Response->prepare()
#5 /home/user/YiiProject/src/vendor/yiisoft/yii2/base/Application.php(381): yii\web\Response->send()
#6 /home/user/YiiProject/src/backend/web/index.php(18): yii\base\Application->run()
#7 {main}
--------------------------------------------------------
解决思路:
Controller的路由正确,可以访问到正确的action;Model 类collectionName, attrabutes, fields一应俱全,并且Mongo数据库中有格式正确的2条数据,打log 显示 findAll([]) 的长度为2,findAll([]) 的结果集是两条空数据 [{}, {}] 。好纳闷啊!!!
想到昨天向大神请教了一个关于fields()的问题,数据是空的,会不会是被fields()给过滤掉了?排查field()发现并没有删除数据而是直接返回数据库中的数据。因为Model是继承了PlainModel.php, 然后又找了一下Model的父类PlainModel.php, 发现PlainModel.php在处理'_id'(主键,mongoId类型)时,并不是直接将数据库里的'_id'返回,而是转成了string型返回。恍然大悟!我自己写的Model里的fields 返回的也是MongoId类型的,导致DOM在解析XML时认为是非法字符,引发异常。
MongoDB里的数据格式如下:
{
"_id" : ObjectId("577325cfb58c1c90788b456b"),
"memberId" : ObjectId("5761f44fb58c1c4a438b4567"),
"cardId" : ObjectId("576bc973b58c1cec3a8b4567"),
"createdAt" : ISODate("2016-06-29T01:35:11.793Z")
}
解决方法:
在 fields() 方法里将 MongoId 类型转为 string 类型
public function fields()
{
return array_merge(
parent::fields(),
[
'memberId' => function($model) {
return $model->memberId . '';
},
'cardId' => function($model) {
return $model->cardId . '';
}
]
);
}
exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb的更多相关文章
- VMware安装时Error 1324. The path My Documents contains a invalid character的原因和解决方法
终于找到了自己想要的答案,顶顶,吼吼~ 我今天安装VMware Workstation时,总是提示我Error 1324. The path My Documents contains a inval ...
- 元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”;Syntax error on token "Invalid Character";Server returned HTTP response code: 503 for URL;
元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”:复制的代码有中文空格 Syntax error on token "Invalid Character&qu ...
- Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换
Package CJK Error: Invalid character code. 问题解决方法--xelatex和pdflatex编译的转换 解决方法:添加格式说明信息 将下面语句: \docum ...
- UBUNTU下MONGODB出现PHP Fatal error: Uncaught exception 'MongoConnectionException' with message 和 Authentication failed on database 'admin' with username
MONGO 远程连接服务器,出现: PHP Fatal error: Uncaught exception Stack trace:# /var/www/data/update_data.php(): ...
- [转]Syntax error on token "Invalid Character", delete this token 的解决
原文 http://blog.csdn.net/actsai/article/details/24256987 主题 Eclipse Unicode Java eclipse 中遇到了Syntax ...
- DVWA--登录页面错误问题 469 | | PHP Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in C:\web\DVWA\dvwa\includes\dvwaPage.inc.php:469
// MySQL PDO Prepared Statements (for impossible levels) $db = new PDO('mysql:host=' . $_DVWA[ 'db_s ...
- Eclipse 中 Syntax error on token "Invalid Character", delete this token 的解决
eclipse中遇到了Syntax error on token "Invalid Character", delete this token(令牌“无效字符”上的语法错误,删除此 ...
- Jmeter:运行报:Error occurred starting thread group :线程组, error message:Invalid duration 0 set in Thread Group:线程组, see log file for more details
最近在用jmeter做压测,上周五压测的脚本,今天早晨结束后. 点击同样的脚本,运行就报Error occurred starting thread group :线程组, error message ...
- 【Tomcat】Invalid character found in the request target
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC ...
随机推荐
- NDK问题总结
转自 这篇文章中很多东西!!:http://blog.chinaunix.net/uid-20746260-id-3910616.html 1. 创建JNI头文件 在工程目录下输入: javah -c ...
- 关于android 5.0对开发带来的影响
由于google推出了android5.0的系统,在app的安装方式,权限的管理方面与之前的系统有较大的区别.自己做的app也有体会.现在记录一些要注意的东西,防止忘记: 1.5.0改变了对自定义权限 ...
- Java基础(一) ---- 封装(Encapsulation)
- 6410实现网卡(DM9000A)收发功能及ARP协议实现
1. 网卡硬件结构(DM9000A) 网卡的实质就是MAC通过MII接口控制PHY的过程. MAC主要负责数据帧的构建.数据差错检查.传送控制等. PHY是物理接口收发器,属于物理层,当它收到MAC过 ...
- python3网络爬虫笔记
参考资料 Python官方文档 知乎相关资料(1) 这篇非常好, 通俗易懂的总览整个Python学习框架. 知乎相关资料(2) 代码实现(一): 用Python抓取指定页面 #!/usr/bin/en ...
- Spring集成Memcached三种方式(一)
转载:http://blog.csdn.net/u013725455/article/details/52102170 Memcached Client目前有3种: Memcached Client ...
- VS2013不显示最近打开文件
首先点击开始在左下角输入"regedit" 右击HKEY_CURRENT_USER,点击查找,输入NoRecentDocsHistory 在右边找到NoRecentDocsHist ...
- According to TLD or attribute directive in tag file, attribute test does not accept any expressions
HTTP Status 500 - /WEB-INF/views/emp/list.jsp (line: 30, column: 4) According to TLD or attribute di ...
- C# 基础排序与查找算法
排序算法: class Sort { static void swap<T>(ref T a, ref T b) { T tmp = a; a = b; b = tmp; } #regio ...
- publish/subscribe
Pub/Sub功能 Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能.基于事件的系统中,Pub/Sub是目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供 ...