我有一个Yii应用程序,我知道应用程序一直在处理实时环境。当我在本地环境中运行它时,我收到以下错误:
“使用未定义的常量主页 - 假定为'主页'”
这是在抛出错误之前运行的代码:
if(isset($pageID)){
$page = Page::model()->findByPk($pageID);
} else {
$url = Yii::app()->getRequest()->getQuery('action');
if(isset($url)){
$page = Page::model()->findByAttributes(array('url'=>$url));
} else {
$page = Page::model()->findByPk(2);
}
}
该行:
$ page = Page :: model() - > findByPk(2);
...在堆栈跟踪中突出显示。在评论了除此行之外的所有内容之后,仍然会提供通知。我怀疑这意味着问题出在模型代码Page.php。
上这是一个直接的代码,可以在实时服务器上运行没问题。
Yii擅长详细说明错误并突出显示实际区域:
/yii/framework/db/ar/CActiveRecord.php(386)
* }
* </pre>
*
* @param string $className active record class name.
* @return CActiveRecord active record model instance.
*/
public static function model($className=__CLASS__)
{
if(isset(self::$_models[$className]))
return self::$_models[$className];
else
{
$model=self::$_models[$className]=new $className(null);
$model->_md=new CActiveRecordMetaData($model);
$model->attachBehaviors($model->behaviors());
return $model;
}
}
我并不诚实地理解这个错误的含义或导致错误的原因。我已经尝试了各种各样的事情来纠正或进一步了解出了什么问题,我正在画一个空白。它似乎不是与数据库的连接(已正确修改为本地设置)。 .htaccess看起来很好,mod-rewrite它打开了。 config.php文件调用必要的模型等。不知道从哪里开始。
为什么会抛出此错误,我该如何修复它?
更新
我已经在模型Page.php中找到了问题
在省略某些内容后,通知不会加载,例如:
const HOME=home;
const ABOUT=about;
我认为之前没有发生这种情况,因为我使用的是旧版本的MAMP或不同的php.ini设置。
设置
error_reporting = E_ALL & ~E_NOTICE
php.ini中的清除了错误。
仍然想知道为什么PHP不喜欢以这种方式定义的这些常量以及正确的方法。
答案 0 :(得分:0)
这种错误(或者,确切地说:这种通知)通常是在变量名称之前省略$
的结果。如果home
$home
应该是'home'
,则解释器将其视为常量,但由于此类常量先前未定义,因此抛出通知并假设字符串值为{{1}}情况)。
您没有在其他计算机上收到通知的原因很可能是由于通知在那里被抑制。
你粘贴的剪辑看起来不像是对此负责(特别是因为它来自Yii类之一);你确定你没有从整个堆栈跟踪中的某个地方粘贴代码吗?