Yii2-高级:数据提供者
Yii2-advanced : dataProvider
我想在 siteController 中增加我的 dataProvider。也就是说,在每次迭代中,我的 dataProvider 应该递增 1 并重命名为 dataProvider1、dataProvider2、dataProvider3、....& 等等。
我尝试将 $i 附加到 dataProvider,但它显示“dataProvider 无法转换为字符串...!”
我的actionIndex如下:
public function actionIndex()
{
$query = new \yii\db\Query;
for ($i = 1; $i <= 20; $i++) {
$query->select('*')->from('business_main_categories')->where(['bmc_id' => $i]);
$query->createCommand();
$dataProvider.$i = new ActiveDataProvider([
'query' => $query,
'pagination' => false,
]);
return $this->render('index', [
'dataProvider' => $dataProvider.$i,
]);
}
}
而且,我还想在我的 'index.php' 中使用该 dataProvider 进行迭代;我试图插入一个 for 循环并在 'echo' 中写入所有语句,但我无法完成它。
我在'index.php'中的访问方式如下:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'summary' => '',
'columns' => [
[
'attribute' => 'bmc_image',
'format' => 'html',
'label' => '',
'value' => function ($data) {
return Html::img($data['bmc_image'],
['width' => '190px']);
},
],
]
]); ?>
请帮我解决问题。
我没有使用 gridview 就解决了我的问题。如下-
我的站点控制器 -
public function actionIndex()
{
$searchModel = new BusinessMainCategoriesSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize = $dataProvider->getTotalCount(); //-1 : disable
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
使用此代码,我从我的数据库中获取了 dataProvider 中的所有记录。
(请注意,我在 'BusinessMainCategoriesSearch' 模型中使用 ActiveDataProvider)
而且,我的 index.php 是 -
<?php
$m = $dataProvider->getModels();
foreach ($m as $dp) {
echo "<img src = '".$dp['bmc_image']."' />";
echo '<center><font color = "white">'.$dp['bmc_name'].'<font/></center>';
} ?>
这对我来说效果很好,而且这是最简单的方法。
我想在 siteController 中增加我的 dataProvider。也就是说,在每次迭代中,我的 dataProvider 应该递增 1 并重命名为 dataProvider1、dataProvider2、dataProvider3、....& 等等。 我尝试将 $i 附加到 dataProvider,但它显示“dataProvider 无法转换为字符串...!”
我的actionIndex如下:
public function actionIndex()
{
$query = new \yii\db\Query;
for ($i = 1; $i <= 20; $i++) {
$query->select('*')->from('business_main_categories')->where(['bmc_id' => $i]);
$query->createCommand();
$dataProvider.$i = new ActiveDataProvider([
'query' => $query,
'pagination' => false,
]);
return $this->render('index', [
'dataProvider' => $dataProvider.$i,
]);
}
}
而且,我还想在我的 'index.php' 中使用该 dataProvider 进行迭代;我试图插入一个 for 循环并在 'echo' 中写入所有语句,但我无法完成它。
我在'index.php'中的访问方式如下:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'summary' => '',
'columns' => [
[
'attribute' => 'bmc_image',
'format' => 'html',
'label' => '',
'value' => function ($data) {
return Html::img($data['bmc_image'],
['width' => '190px']);
},
],
]
]); ?>
请帮我解决问题。
我没有使用 gridview 就解决了我的问题。如下-
我的站点控制器 -
public function actionIndex()
{
$searchModel = new BusinessMainCategoriesSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$dataProvider->pagination->pageSize = $dataProvider->getTotalCount(); //-1 : disable
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
使用此代码,我从我的数据库中获取了 dataProvider 中的所有记录。 (请注意,我在 'BusinessMainCategoriesSearch' 模型中使用 ActiveDataProvider)
而且,我的 index.php 是 -
<?php
$m = $dataProvider->getModels();
foreach ($m as $dp) {
echo "<img src = '".$dp['bmc_image']."' />";
echo '<center><font color = "white">'.$dp['bmc_name'].'<font/></center>';
} ?>
这对我来说效果很好,而且这是最简单的方法。