[已解决]View里必须先有CHtml, 后有Widget

一个奇怪的问题:



<?php echo CHtml::link(''); ?>


<!-- HTML CODE -->


<?php $this->widget('TopMembers') ?>


<!-- HTML CODE -->


我如果把<?php echo CHtml::link(''); ?> 放在 widget的后面,或者注释掉 CHtml这一行,就会出现下面的错误:



Fatal error: Class 'CHtml' not found in D:xampphtdocsprotectedlibraryYiiviewszh_cnexception.php on line 8


空白页中只有这一个错误。 异常跟踪也失踪了.

麻烦看下是我哪里的错误引起的.

谢谢!

你有没有用APC或其它caching? 这个问题很有可能是bytecode cache引起的。

没有用到任何caching

只是PHP配置里开启了APC.

我的config/main.php 也是使用 blog的, 只是加入了CWebLogRoute和CProfileLogRoute

把APC关掉试试。在开发阶段,启用APC常常会出现类似问题。

关掉了. 还是一样的问题. 我的系统里没有其他的caching了.

我检查了其它的使用 widget的地方,  也并没有写到 CHtml. 只有这一个会这样

可能是我有的地方弄错了. 但这个异常这样报出, 很迷糊

的确比较奇怪。错误肯定是发生在你的widget里。

但是我很奇怪为什么PHP会说找不到CHtml。

这样吧,你把下面这句话加到你的controller class前面,看看到底是什么错误:

Yii::import('system.web.helpers.CHtml', true);

灵异事件发生了:

我把原来的CHtml的链接注释掉, 把你给的这句话放在原来的位置, 刷新成功.

然后再这句话放到controller. 刷新成功.

我把这句话注释掉 ===>  又成功了~~~

现在我把这两段代码都去掉了,  页面刷新成功了.没有问题了…

这是不是就意味着有哪里的缓存起了作用?

可是又说不通

你是怎么关闭APC的?不能只是简单的restart apache。要先shutdown然后start。

我用的XAMPP的 controller panel.

先点击 "STOP",

再点击 "START"

并且确定了phpinfo()中的APC是关闭的