【发布时间】:2014-08-25 09:45:57
【问题描述】:
我收到此错误消息
Notice: Notice (8): Uninitialized string offset: 39
经常出现在这一行:
if(isset($getCity) && !empty($getCity)) $city = '/'.Inflector::slug($getCity[$this->request->params['named']['city']]); else $city = '';
我试图了解我收到此消息的原因并添加了调试日志
CakeLog::write('activity', 'getCity '.print_r($getCity, true).'===>'.$this->request->params['named']['city'] );
日志文件输出看起来总是这样:
Activity: getCity {"39":"Montuiri"}===>39
什么告诉我
$getCity 是一个带有 result => {"39":"Montuiri"} 的数组
并且$this->request->params['named']['city'] 不是空的并且有一个value => 39
那么是什么导致了通知消息?我真的不明白如何解决这个问题,因为这些消息每天都会写满我的调试日志......
【问题讨论】:
-
调试时使用 var_dump 而不是 print_r。通知中提到了 string 偏移量。尝试将其类型转换为整数
-
尝试利用“现代”CakePHP 特性而不是避免它。不要使用命名参数,使用查询字符串和查询()访问它。如果必须使用命名参数,请先检查是否存在:
!empty($this->request->params['named']['city'])等。