【问题标题】:Yii 2 - Class 'CArrayDataProvider' not foundYii 2 - 找不到类“CArrayDataProvider”
【发布时间】:2017-12-20 06:19:22
【问题描述】:

我是 yii 的新手,正在努力寻找自己的出路。我已经完成了一两个教程。然后我决定开始编辑/更改示例以让我了解更多信息。我创建了一个执行简单 PING 的页面。这得到验证。成功后,它会加载一个静态页面。这一切都有效。

接下来我想做的是看看如何利用网格来填充一些数据。我现实生活中的例子是一样的。我会得到一组数据。

看来 CArrayDataProvider 是我需要的。所以,我试图得到一个非常简单的例子来工作。如果我让它工作,我可以继续。

我已经尝试了一大堆示例。每次的错误都是一样的。看来我没有安装 CArrayDataProvider?如果这是可能的话。

我做了一个标准的基本安装:

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

我的控制器文件开头有以下内容:

use yii2\data\ArrayDataProvider;

这里没有错误。 我在文件系统上搜索文件本身,找不到它。我确实找到了 ArrayDataProvider,所以我尝试了一下,结果相同:

use vendor\yiisoft\yii2\data\ArrayDataProvider;

错误是:

PHP Fatal Error – yii\base\ErrorException
Class 'CArrayDataProvider' not found

这是第 24 行:

"dataProvider = new CArrayDataProvider($fruits);"

这是我的示例代码。并不是我认为问题出在这里,而是为了展示我正在尝试做的事情:

$fruits = array(  
  array('id' => 1, 'name'=>'apple', 'color' => 'green'),  
  array('id' => 2, 'name'=>'orange', 'color' => 'orange'),  
  array('id' => 3, 'name'=>'banana', 'color' => 'yellow'),  
  array('id' => 4, 'name'=>'pineapple', 'color' => 'brown')  
);  

$dataProvider = new CArrayDataProvider($fruits);  

$this->widget('zii.widgets.grid.CGridView', array(  
  'id' => 'fruits-grid',  
  'dataProvider' => $dataProvider ,  
  'columns' => array(  
    array(  
        'name' => 'ID',  
        'value' => '$data["id"]',  
    ),  
    array(  
        'name' => 'Name',  
        'value' => '$data["name"]'  
    ),  
    array(  
        'name' => 'Color',  
        'value' => '$data["color"]'  
    ),  
  )  
));

在文件系统 (linux) 本身我做了更新:​​

composer update

过去 2 天我一直在谷歌搜索,但我什么也没找到。

我尝试添加日期纠察队。那行得通。我用了: https://www.tutorialspoint.com/yii/yii_extensions.htm

简而言之,我调用的静态页面现在显示一个 DateTimePicker。

在我添加的文件开头:

use kartik\datetime\DateTimePicker;

在体内:

<?php
  echo DateTimePicker::widget([
     'name' => 'dp_1',
     'type' => DateTimePicker::TYPE_INPUT,
     'value' => '23-Feb-1982 10:10',
     'pluginOptions' => [
        'autoclose'=>true,
        'format' => 'dd-M-yyyy hh:ii'
     ]
  ]);
?>

如何让 yii2 允许我使用 ArrayDataProvider。或者如何安装扩展?或者我应该参考谁?

【问题讨论】:

  • 当您使用 yii2 时,您必须使用 ArrayDataProvider 而不是 CArrayDataProvider,因为这是 yii 1.*

标签: php yii


【解决方案1】:

在 Yii2 中没有CArrayDataProvider。使用ArrayDataProvider,如文档中所述:

$provider = new yii\data\ArrayDataProvider([
   'allModels' => $query->from('post')->all(),
   'sort' => [
       'attributes' => ['id', 'username', 'email'],
   ],
   'pagination' => [
       'pageSize' => 10,
   ],
]);

记录得很好here

【讨论】:

  • 嗨。现在我得到这个错误: Unknown Property – yii\base\UnknownPropertyException Setting unknown property: yii\data\ArrayDataProvider::0
  • 打开文档,看看你应该在$fruits变量下提供什么。记录得很好……
【解决方案2】:

Yii2 支持ArrayDataProvider 和 yii 1.* 支持 CArrayDataProvider,所以根据您的代码,您使用的是 Yii2,所以只需将下面的行替换为

$dataProvider = new CArrayDataProvider($fruits);  

有了这个:

$dataProvider = new ArrayDataProvider($fruits);

【讨论】:

  • “相同”错误。我得到“PHP 致命错误 – yii\base\ErrorException Class 'ArrayDataProvider' not found”。在我的控制器文件中,我尝试使用 yii2\data\ArrayDataProvider;并使用 vendor\yiisoft\yii2\data\ArrayDataProvider;。还是一样的错误。
【解决方案3】:

感谢大家的帮助!我现在有一个工作示例。

如果其他人有同样的问题,我会在这里发布我的工作代码:

use kartik\grid\GridView;


$resultData = [
array("id"=>1,"name"=>"Cyrus","email"=>"risus@consequatdolorvitae.org"),
array("id"=>2,"name"=>"Justin","email"=>"ac.facilisis.facilisis@at.ca"),
array("id"=>3,"name"=>"Mason","email"=>"in.cursus.et@arcuacorci.ca"),
array("id"=>4,"name"=>"Fulton","email"=>"a@faucibusorciluctus.edu"),
array("id"=>5,"name"=>"Neville","email"=>"eleifend@consequatlectus.com"),
array("id"=>6,"name"=>"Jasper","email"=>"lectus.justo@miAliquam.com"),
array("id"=>7,"name"=>"Neville","email"=>"Morbi.non.sapien@dapibusquam.org"),
array("id"=>8,"name"=>"Neville","email"=>"condimentum.eget@egestas.edu"),
array("id"=>9,"name"=>"Ronan","email"=>"orci.adipiscing@interdumligulaeu.com"),
array("id"=>10,"name"=>"Raphael","email"=>"nec.tempus@commodohendrerit.co.uk"),     
];


$dataProvider = new \yii\data\ArrayDataProvider([
    'key'=>'id',
    'allModels' => $resultData,
    'sort' => [
        'attributes' => ['id', 'name', 'email'],
    ],
]); 


echo GridView::widget([
    'dataProvider' => $dataProvider,

    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'id',

        [
        'attribute' => 'name', 
        'value' => 'name',
        ],
        [
        "attribute" => "email",
        'value' => 'email',
        ]

  ]
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多