Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Could an ArrayDataProvider be used as an ActiveDataProvider?

Tags:

yii2

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
        'sort'=>[
        'attributes'=>['id','category','question','answer']],
        'pagination'=>[
            'pageSize'=>10,
        ],
        ]);
}

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

Wijnand


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.