Php 包含CDATA列-如何与yii正确使用require\u一次

Php 包含CDATA列-如何与yii正确使用require\u一次,php,yii,Php,Yii,我试图在CGridView中使用yii扩展数据列。但是,我可能会遇到一个错误,错误地使用require_一次,或者错误地使用DataColumn作为一个整体 为了便于参考,我将DataColumn.php包含在yii中受保护的组件文件夹中 require_once(Yii::app()->basePath . '/components/DataColumn.php'); 数据列如下所示 class DataColumn extends CDataColumn { /**

我试图在CGridView中使用yii扩展数据列。但是,我可能会遇到一个错误,错误地使用require_一次,或者错误地使用DataColumn作为一个整体

为了便于参考,我将DataColumn.php包含在yii中受保护的组件文件夹中

require_once(Yii::app()->basePath . '/components/DataColumn.php'); 
数据列如下所示

 class DataColumn extends CDataColumn
{
    /**
     * @var boolean whether the htmlOptions values should be evaluated. 
     */
    public $evaluateHtmlOptions = false;

     /*
    ... 
 $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'account-grid',
    'dataProvider'=>$dataProvider,
    'filter'=>$model,
    'columns'=>array(
        'name',
        'mobile_comp',
        'msisdn',
        // this formats the balance
        array(
            'class'=>'DataColumn'
            'header'=>'Balance (Rwf)',
            'name'=>'balance',
            'evaluateHtmlOptions'=>true,
            'htmlOptions'=>array('id'=>'balance'),
            'value'=>function($data){
            return number_format($data->balance);
            },

        ), 
        /*
        'company',
        */ 

        array(
        'class'=>'CButtonColumn',
        'template'=>'{manage}',
        'buttons'=>array
        (
        'manage' => array
        (
            'label'=>'Manage',
            'url'=>'Yii::app()->createUrl("account/view", array("id"=>$data->id))'
         ),
        ),
    ),
))); 
 ?> 
然而,有了这个include和这个DataColumn,我遇到了错误

include(CDataColumn.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory 

您不必单独包含
DataColumn
。由于您已将其放在Components文件夹中,Yii将自动导入它,但是,在向GridView添加新列时,确实需要引用完整的类路径别名,如下所示

<?php $this->widget('zii.widgets.CGridView',array(
  ....
  ....
  'columns'=>array(
    array(
     class'=>'application.components.DataColumn'
      ...
    )
  );

您如何在网格视图中调用DataColumn?我像soto Clearify一样调用它,当您执行类似“application.components.DataColumn”的操作时—这已经假设您处于受保护状态?或者它如何从这里知道正确的路径?正如您所知,yii 1.x不使用名称空间,因此别名使用“点语法”应用程序(即受保护的目录)是一个根别名以及webroot(index.php所在)、ext(扩展)、system(framework)等,请参阅完整的infoThans Manquer!在这个上下文中,名称空间是什么意思?我指的是仅在通常上下文中的名称空间,当您引用
DataColumn
时,Yii(即php)应该清楚地知道调用哪个类(文件),在Yii 2.x中,所有内容都是名称空间的,因此您将有一个像
use-app\components\DataColumn,并正常引用该类,因为在Yii 1.x中,您不能这样做,您必须使用别名来扩展Yii 1.x,因为大多数主机/发行版至少在5.4/5(Yii 2.x要求>=5.4)上,所以它设计为在没有名称空间的情况下使用,以支持PHP的较低版本,Yii实现了最近发布的PHP的OOP特性