我尝试在我的config/main.php
:
'components' => array(
'widgetFactory' => array(
'widgets' => array(
'CGridView' => array(
'cssFile' => Yii::app()->request->baseUrl . '/css/gridview.css',
),
),
),
...
我收到警告:
Trying to get property on a non object /path_to_project/protected/config/main.php on line 79
我如何能够抑制这个警告,以及为什么我得到它,当我在视图文件中使用它时,它都能正常工作。
P.S。是的我可以将display_errors
ini设置为false并且消息将消失,但我希望清楚地了解它。谢谢!
答案 0 :(得分:4)
警告的原因是CHttpRequest对象Yii::app()->request
尚未实例化。
来自the API page for CApplication:
处理a时,CApplication将经历以下生命周期 用户请求:
- 加载应用程序配置;
- 设置错误处理;
- 加载静态应用程序组件;
- onBeginRequest:预处理用户请求;
- processRequest:处理用户请求;
- onEndRequest:后处理用户请求;
醇>从生命周期3开始,如果发生PHP错误或未捕获的异常,应用程序将切换到其错误处理逻辑,然后跳转到步骤6。
您的错误发生在第一步。因此,Yii的错误处理尚未设置。唯一的选择是使用@
operator
'cssFile' => @Yii::app()->request->baseUrl . '/css/gridview.css',
<强>无论其强>
这是一个糟糕的主意,因为你基本上是隐藏错误而不是修复错误。
如果您的观点显示正确(没有css错误),您可以省略Yii::app()->request->baseUrl
并使用:
'cssFile' => '/css/gridview.css'
如果您遇到错误,可以在components
文件夹中创建一个扩展CWidgetFactory
的类,并设置任何依赖于其他组件的变量,例如
class MyWidgetFactory extends CWidgetFactory {
public function init() {
parent::init();
$this->widgets['CGridView']['cssFile'] = Yii::app()->request->baseUrl.'css/gridview.css';
}
}
您需要调整components
才能使用此文件:
'components' => array(
'widgetFactory' => array(
'class' => 'MyWidgetFactory'
...