2014-12-28 1 views
3

ArrayDataProvider를 사용하여 listView를 채우기 위해 사용하려고합니다. 그러나 dataProvider는 객체가 아니라 배열로 구성됩니다. 모델의 범주가 다른 테이블의 해당 ID에 해당하는 이름이 필요한 ID이기 때문에이 문제가 발생했습니다. 따라서 id는 해당 이름 인 Array를 만들었습니다.ArrayDataProvider를 ActiveDataProvider로 사용할 수 있습니까?

private function getDataProvider() 
{ 
    return new ArrayDataProvider([ 
     'allModels'=>$this->getFaqs(), // returns array of faqs 
     'sort'=>[ 
     'attributes'=>['id','category','question','answer']], 
     'pagination'=>[ 
      'pageSize'=>10, 
     ], 
     ]); 
} 

가 여기 내 ListView에 위젯이 작동

echo ListView::widget([ 
'dataProvider' => $dataProvider, 
'itemView' => function($dataProvider, $key, $index, $widget) 
{ 
    return Html::a($dataProvider->question, 
      Url::toRoute(['faq/view', 'id' => $dataProvider->primaryKey])); 
} 
]); 

답변

5

, 나는이

$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처럼 사용의 GridView는 YII의 \ 데이터 \의 DataProviderInterface를 구현하는 모든 클래스를 사용할 수 있습니다. 여기서 누가 http://www.yiiframework.com/doc-2.0/yii-data-dataproviderinterface.html을 사용하여 누가 구현하는지 볼 수 있으므로 ListView 및 GridView에서 해당 클래스를 사용할 수 있습니다.

당신은 또한

'allModels'=>$this->faqs, // returns array of faqs 
+0

감사 할 수 있어야, 나는 그것이 객체처럼 사용할 수 있다고 생각. 이제는 배열처럼 다루어야한다는 것을 알고 있습니다. – Wijnand

+0

allModels는 객체의 배열 일 수 있다고 생각합니다. –

관련 문제