简体   繁体   中英

Yii Class CActiveDataProvider not found

I'm new to Yii, and I'm getting this error "Class 'app\\controllers\\CActiveDataProvider' not found" while running a widget.

This is my code:

models/industrial.php:

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Industrial extends ActiveRecord
{
}

controllers/IndustrialController.php:

<?php

namespace app\controllers;

use yii\web\Controller;
use yii\data\Pagination;
use app\models\industrial;


class IndustrialController extends Controller
{


    public function actionIndex()
    {
        $dataProvider=new CActiveDataProvider('Industrial', array(

    'pagination'=>array(
        'pageSize'=>20,
    ),
));
        $query = industrial::find();

        $pagination = new Pagination([
            'defaultPageSize' => 20,
            'totalCount' => $query->count(),
        ]);

        $industrials = $query->orderBy('Company_Name')
            ->offset($pagination->offset)
            ->limit($pagination->limit)
            ->all();




        return $this->render('index', [
            'industrials' => $industrials,
            'pagination' => $pagination,
            'dataProvider'=>$dataProvider,
        ]);



}
}

views/industrial/index.php:

<?php
use yii\helpers\Html;
use yii\widgets\LinkPager;
?>
<h1>Industrial Companies</h1>
<ul>
<?php

use kartik\export\ExportMenu;

use kartik\grid\GridView;

$gridColumns = [
    ['class' => 'yii\grid\SerialColumn'],
    'id',
    'name',
    [
        'attribute'=>'Name',
        'label'=>'Name',
        'vAlign'=>'middle',
        'width'=>'190px',
        'value'=>function ($model, $key, $index, $widget) { 
            return Html::a($model->Name, '#', []);
        },
        'format'=>'raw'
    ],
    'Name',
    'Location',
    'Telephone',

];
echo ExportMenu::widget([
    'dataProvider' => $dataProvider,
    'columns' => $gridColumns,
    'fontAwesome' => true,
    'dropdownOptions' => [
        'label' => 'Export All',
        'class' => 'btn btn-default'
    ]
]) . "<hr>\n".
GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => $gridColumns,
    'export' => [
        'fontAwesome' => true,
    ]
]);



$array = (array) $industrials;



function build_table($array){

    // start table

    $html = '<table class="altrowstable" id="alternatecolor">';

    // header row

    $html .= '<tr>';

    foreach($array[0] as $key=>$value){

            $html .= '<th>' . $key . '</th>';

        }

    $html .= '</tr>';

    // data rows

    foreach( $array as $key=>$value){

        $html .= '<tr>';

        foreach($value as $key2=>$value2){

            $html .= '<td>' . $value2 . '</td>';

        }

        $html .= '</tr>';

    }

    // finish table and return it

    $html .= '</table>';

    return $html;

}



echo build_table($array);

?>


<?= LinkPager::widget(['pagination' => $pagination]) ?>

What is the problem here? Could you please help me?

我解决了在控制器的开头添加此内容的问题:

use yii\data\ActiveDataProvider;

I believe your issue is caused by your use of namespaces, which Yii 1.1 does not use. Because you declared the namespace to be app/controllers , the CActiveDataProvider is looked for within that namespace, instead of in the global namespace; specifically, it is looking for the class file in the app/controllers directory.

To resolve this, try referencing the class as \\CActiveDataProvider to cause it to look for the class using Yii's autoloader.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM