Logo Questions Linux Laravel Mysql Ubuntu Git Menu

Could an ArrayDataProvider be used as an ActiveDataProvider?



I'm trying to use fill my listView using an ArrayDataProvider. However the dataProvider consists of Arrays, not objects. I ran into this problem because the category in the model is an id, where I need the name corresponding to that id from another table. Hence I created an Array where the id is the corresponding name.

private function getDataProvider()
    return new ArrayDataProvider([
        'allModels'=>$this->getFaqs(), // returns array of faqs

Here is my ListView widget

echo ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => function($dataProvider, $key, $index, $widget)
    return Html::a($dataProvider->question,
            Url::toRoute(['faq/view', 'id' => $dataProvider->primaryKey]));
like image 903
Wijnand Avatar asked Mar 18 '23 12:03


1 Answers

It works, I use it like this

$dataProvider = new ArrayDataProvider([
            'allModels' => [['name' => '0am - 6am'], ['name' => '6am - 9pm'], ['name' => '9am - 12pm'], ['name' => '12pm - 3pm'], ['name' => '3pm - 6pm']],

<?= ListView::widget([
    'dataProvider' => $dataProvider,
    'layout' => "{items}",
    'itemOptions' => ['class' => 'item', 'style' => 'margin-bottom: 5px;'],
    'itemView' => function ($model, $key, $index, $widget) use ($transportRun) {
        //return print_r($model, true);
        return Html::a(Html::encode($model['name']), ['delivery/index', 'DeliverySearch' => ['transport_run' => $transportRun, 'timeslot' => $key]],  ['class' => 'btn btn-lg btn-primary btn-block']);
]) ?>

ListView and GridView can use any class that implements yii\data\DataProviderInterface. You can take a look here http://www.yiiframework.com/doc-2.0/yii-data-dataproviderinterface.html to see who implements it, so you can use any of those classes on both ListView and GridView.

You should also be able to do a

'allModels'=>$this->faqs, // returns array of faqs
like image 142
Mihai P. Avatar answered Apr 26 '23 22:04

Mihai P.