📜  Yii-资产(1)

📅  最后修改于: 2023-12-03 15:21:21.388000             🧑  作者: Mango

Yii-资产

Yii 是一个基于 PHP 的开源 Web 应用框架,提供了一套完整的前后端解决方案以支持从请求路由到输出响应的所有方面。在 Yii 框架的基础上,我们可以很方便地实现各种业务场景,其中资产管理是其中的一个重要方向。下面将介绍如何在 Yii 中实现资产管理功能。

资产管理需求

在资产管理中,我们需要完成以下功能:

  1. 创建资产:可以添加资产的名称、描述、价格等基本信息。
  2. 编辑资产:可以修改资产的基本信息。
  3. 删除资产:可以删除已创建的资产。
  4. 显示资产列表:可以一次性浏览所有的资产信息。
  5. 搜索资产:可以根据名称、描述、价格等参数搜索资产。
资产管理实现
数据库设计

由于本文实现的是简单的资产管理功能,我们只需要创建一个资产表即可。创建资产表的 SQL 语句如下:

CREATE TABLE `asset` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(255) NOT NULL COMMENT '资产名称',
  `description` TEXT COMMENT '资产描述',
  `price` DECIMAL(10,2) NOT NULL COMMENT '资产价格',
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间'
) ENGINE=INNODB DEFAULT CHARSET=utf8;
数据库连接配置

接下来,我们需要在 Yii 中配置数据库连接。在 config/db.php 文件中添加以下内容:

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=yii_asset',
    'username' => 'root',
    'password' => '123456',
    'charset' => 'utf8',
];
模型创建

为了方便操作数据库,我们可以创建一个模型类 Asset,用于存取资产表。

namespace app\models;

use yii\db\ActiveRecord;

class Asset extends ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'asset';
    }
}
控制器创建

在控制器中,我们需要完成资产管理的各个功能。这里以 AssetController 为例,介绍如何实现资产管理:

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\Asset;

class AssetController extends Controller
{
    /**
     * 显示资产列表
     */
    public function actionIndex()
    {
        $assets = Asset::find()->orderBy(['created_at' => SORT_DESC])->all();

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

    /**
     * 创建资产
     */
    public function actionCreate()
    {
        $asset = new Asset();

        if ($asset->load(Yii::$app->request->post()) && $asset->save()) {
            Yii::$app->session->setFlash('success', '创建资产成功');

            return $this->redirect(['index']);
        } else {
            return $this->render('create', ['asset' => $asset]);
        }
    }

    /**
     * 编辑资产
     */
    public function actionUpdate($id)
    {
        $asset = Asset::findOne($id);

        if ($asset->load(Yii::$app->request->post()) && $asset->save()) {
            Yii::$app->session->setFlash('success', '修改资产成功');

            return $this->redirect(['index']);
        } else {
            return $this->render('update', ['asset' => $asset]);
        }
    }

    /**
     * 删除资产
     */
    public function actionDelete($id)
    {
        $asset = Asset::findOne($id);
        $asset->delete();

        Yii::$app->session->setFlash('success', '删除资产成功');

        return $this->redirect(['index']);
    }

    /**
     * 搜索资产
     */
    public function actionSearch($keyword = '', $page = 1, $pageSize = 20)
    {
        $query = Asset::find();

        if ($keyword) {
            $query->andWhere(['or', ['like', 'name', $keyword], ['like', 'description', $keyword]]);
        }

        $totalCount = $query->count();
        $assets = $query->orderBy(['created_at' => SORT_DESC])->offset(($page - 1) * $pageSize)->limit($pageSize)->all();

        return $this->render('search', [
            'assets' => $assets,
            'totalCount' => $totalCount,
            'page' => $page,
            'pageSize' => $pageSize,
            'keyword' => $keyword,
        ]);
    }
}
视图创建

最后,我们需要创建视图文件,用于展示数据。在 views/asset/ 目录下,创建以下文件:

  • index.php:显示所有资产。
  • create.php:创建资产。
  • update.php:编辑资产。
  • search.php:搜索资产。

index.php

<h1>资产列表</h1>

<p>
    <?= \yii\helpers\Html::a('创建资产', ['create'], ['class' => 'btn btn-primary']) ?>
    <?= \yii\helpers\Html::a('搜索资产', ['#search-modal'], ['class' => 'btn btn-default', 'data-toggle' => 'modal']) ?>
</p>

<table class="table">
    <tr>
        <th>资产名称</th>
        <th>资产描述</th>
        <th>资产价格</th>
        <th>创建时间</th>
        <th>操作</th>
    </tr>
    <?php foreach ($assets as $asset): ?>
        <tr>
            <td><?= $asset->name ?></td>
            <td><?= $asset->description ?></td>
            <td><?= $asset->price ?></td>
            <td><?= $asset->created_at ?></td>
            <td>
                <?= \yii\helpers\Html::a('编辑', ['update', 'id' => $asset->id]) ?>
                <?= \yii\helpers\Html::a('删除', ['delete', 'id' => $asset->id], ['data-method' => 'post', 'data-confirm' => '确定要删除该资产吗?']) ?>
            </td>
        </tr>
    <?php endforeach; ?>
</table>

create.php

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;

$this->title = '创建资产';
?>

<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(); ?>

<?= $form->field($asset, 'name')->textInput() ?>
<?= $form->field($asset, 'description')->textarea() ?>
<?= $form->field($asset, 'price')->textInput() ?>

<div class="form-group">
    <?= Html::submitButton('保存', ['class' => 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

update.php

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;

$this->title = '编辑资产';
?>

<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(); ?>

<?= $form->field($asset, 'name')->textInput() ?>
<?= $form->field($asset, 'description')->textarea() ?>
<?= $form->field($asset, 'price')->textInput() ?>

<div class="form-group">
    <?= Html::submitButton('保存', ['class' => 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

search.php

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;

$this->title = '搜索资产';
?>

<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['method' => 'get']); ?>

<?= $form->field($this->params['searchModel'], 'keyword')->textInput(['placeholder' => '请输入关键字进行搜索'])->label(false) ?>
<?= Html::button('搜索', ['class' => 'btn btn-primary', 'type' => 'submit']) ?>

<?php ActiveForm::end(); ?>

<table class="table">
    <tr>
        <th>资产名称</th>
        <th>资产描述</th>
        <th>资产价格</th>
        <th>创建时间</th>
    </tr>
    <?php foreach ($assets as $asset): ?>
        <tr>
            <td><?= $asset->name ?></td>
            <td><?= $asset->description ?></td>
            <td><?= $asset->price ?></td>
            <td><?= $asset->created_at ?></td>
        </tr>
    <?php endforeach; ?>
</table>

<?php
echo \yii\widgets\LinkPager::widget([
    'pagination' => new \yii\data\Pagination(['totalCount' => $totalCount, 'pageSize' => $pageSize]),
    'options' => [
        'class' => 'pagination',
    ],
]);
?>
总结

资产管理是一个常见的业务场景,在 Yii 框架的支持下,我们可以轻松实现资产的增删改查功能。当然,以上代码仅仅是一个简单的示例,实现过程中可能还需要根据实际业务需求进行调整和优化。