问:Yii2从数据库加载数据

时间:2018-07-13 18:34:09

标签: php database model-view-controller yii2 uikit

从数据库加载数据时遇到问题。 我的目标是实现一个MVC,该MVC在视图中动态显示db表中存储的值。因此,在Project模型中,我有以下代码:

     public function search($params)
{
    $query = project::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    $this->load($params);

    if (!$this->validate()) {

        return $dataProvider;
    }

    // grid filtering conditions
    $query->andFilterWhere([
        'id' => $this->id,
        'position' => $this->position,
        'created_at' => $this->created_at,
        'is_deleted' => $this->is_deleted,
    ]);

    $query->andFilterWhere(['ilike', 'title', $this->title])
        ->andFilterWhere(['ilike', 'description', $this->description])
        ->andFilterWhere(['ilike', 'link', $this->link])
        ->andFilterWhere(['ilike', 'image', $this->image]);

    return $dataProvider;
}

在控制器中:

     public function actionIndex()
{
    $searchModel = new SeachProject();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    return $this->render('index', [
        'searchModel' => $searchModel,
        'dataProvider' => $dataProvider,
    ]);
}

在视图(index.php)中:

 <?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
            'title',
      'description',
      'image',
    ],
]); ?>

这很好,但是我需要将这些值打印到Uikit卡中,而不是通过Gridview限制(这实际上是我所知道的唯一方法)。对于表中的每条记录,我都应该拥有一张卡片,其中包含一个图像(表的图像字段中的url)和一个链接(表的链接字段中的url)。 任何建议的话都会很好,在此先感谢!

1 个答案:

答案 0 :(得分:2)

您可以使用ListView并使用UiKit卡或材料设计来创建任何类型的结构。

  

ListView小部件用于显示来自数据提供程序的数据。每   数据模型使用指定的视图文件呈现。由于它   提供诸如分页,排序和过滤等功能   框,方便向最终用户显示信息和创建信息   数据管理用户界面。

典型用法如下:

use yii\widgets\ListView;
use yii\data\ActiveDataProvider;


echo ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_ui-card',
    'viewParams' => [
       'fullView' => true,
       'context' => 'main-page',
    ],
]);

_ui-card视图文件可以包含以下基本卡html:

<?php
use yii\helpers\Html;
use yii\helpers\HtmlPurifier;
?>
<div class="uk-card">
    <div class="uk-card-header">
        <h3 class="uk-card-title"><?= Html::encode ( $model->title ) ?></h3>
    </div>
    <div class="uk-card-body"><img src="<?= Html::encode ( $model->image ) ?>"><?= Html::encode ( $model->link ) ?></div>
    <div class="uk-card-footer"></div>
</div>

这样,您可以使用查看文件将每个项目显示为单独的卡。 希望这会有所帮助