首页 > 解决方案 > Q: Yii2 从数据库加载数据

问题描述

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

     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)。任何建议的话都会很好,在此先感谢!

标签: phpdatabasemodel-view-controlleryii2uikit

解决方案


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

ListView 小部件用于显示来自数据提供者的数据。每个数据模型都使用指定的视图文件呈现。由于它提供了开箱即用的分页、排序和过滤等功能,因此向最终用户显示信息和创建数据管理 UI 都很方便。

一个典型的用法如下:

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>

这样,您可以使用视图文件将每个项目显示为单独的卡片。希望这可以帮助


推荐阅读