YII 初体验 —— 搭建一个简单的 Todo List 系统

本文介绍了使用PHP框架YII搭建一个简单的Todo List系统的全过程,包括初始化YII仓库、创建数据模型、处理Todo业务逻辑、部署应用等步骤。详细讲述了如何配置数据库、创建数据表、编写业务逻辑,并最终部署到Docker容器,实现增删改查功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。

今天,我本着体验 Yii2 的想法,准备使用 Yii2 从 0 到 1 来搭建一个 Todo List,并完成以下功能:

  1. 可以基于某个 key 创建 Todo Item,然后根据 key 查询对应的 Todo Item
  2. 可以置顶、完成、删除单条 Todo Item,置顶的 Todo Item 将排列在最前面,完成的 Todo Item 将排列在最后面。

初始化 YII 仓库

使用下面的命令即可初始化一个 YII 的仓库。

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

但是,我的 mac 通过这个方法老是连不上网络,安装某些依赖失败,所以这里选择第二种方式。(如下)

yiiframework 下载归档文件,然后解压到你要放置的项目目录中。

在下载解压完成后,需要先修改 config/web.php 文件,给 cookieValidationKey 配置项添加一个密钥(随便输入一个值就可以),以便项目能够正常启动。

在项目初始化完成以后,我们使用下面这个命令运行项目吧。

php yii serve --port=8888

然后我们打开 http://localhost:8888,看到我们的页面已经成功启动啦!(如下图)

image

初始化数据模型

接下来,我们来初始化我们的数据模型。

我们需要创建的字段有下面这些:

  • id:自增主键;
  • key:Todo 的 key;
  • title:Todo 的标题;
  • is_completed:Todo 是否完成;
  • is_top:Todo 是否置顶;
  • is_deleted:Todo 是否删除;

而上面这些字段中,我们最多的场景是通过 key 来捞出相关的 Todo Item,所以应该给 key 建立一个普通索引。

综上,我们的 sql 语句应该是这样的:

CREATE TABLE IF NOT EXISTS `todos` (
    `id` int PRIMARY KEY AUTO_INCREMENT,
    `key` varchar(64) NOT NULL DEFAULT '',
    `title` varchar(64) NOT NULL DEFAULT '',
    `is_top` tinyint(1) NOT NULL DEFAULT 0,
    `is_completed` tinyint(1) NOT NULL DEFAULT 0,
    `is_deleted` tinyint(1) NOT NULL DEFAULT 0,
    index `key`(`key`)
) engine=InnoDB CHARSET=utf8;

在数据库中执行该条 SQL,创建对应的数据表。

然后,我们还可以通过下面这条语句查看我们创建的索引。

SHOW INDEX FROM `todos`;

image

处理 Todo 业务逻辑

在数据表创建成功后,我们就准备开始写 Todo 相关的业务逻辑了。

在此之前,我们还需要做一些 Yii 的配置初始化工作。

初始化 Yii 配置

首先,我们的 php 服务需要连接数据库,所以你需要先配置你的数据库连接,也就是 config/db.php

  • 数据库配置
<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=[mysql服务器地址];port=[mysql端口];dbname=[数据库名称]',
    'username' => '[数据库用户名]',
    'password' => '[数据库密码]',
    'charset' => 'utf8',
    'attributes' => [
        // 查询时将 int 类型按原类型返回
        PDO::ATTR_STRINGIFY_FETCHES => false,
        PDO::ATTR_EMULATE_PREPARES => false
    ]
];
  • URL 美化配置

然后,我们再来配置一下 URL 美化,这样就可以按照标准的 restful 风格进行访问了,调整 config/web.php 中的 urlManager 即可。(如下)

'urlManager' => [
  'enablePrettyUrl' => true,
  'enableStrictParsing' => false,
  'showScriptName' => false,
  'rules' => [
  ],
],
  • JSON 入参配置

然后,我们还需要修改一下 request 的配置,以便接受 application/json 的入参。

'components' => [
    ...
    'request' => [
        'parsers' => [
            'application/json' => 'yii\web\JsonParser',
        ]
    ],
    ...
]

修改完了配置后,可以重启一下你的项目。

创建 TodoModel + TodoRepository + TodoService + TodoController

我们先来创建 Todo 的数据实体类 —— TodoModel,这个模型将会贯穿 Todo List 的整个生命周期。

<?php
namespace app\models;

use Yii;
use Yii\base\Model;

class TodoModel extends Model {
   
   
    public $id;
    public $key;
    public $title;
    public $is_top;
    public $is_completed;
    public $is_deleted;
}

然后,我们创建 TodoRepository,用于数据持久化。 —— SQL 写在这里。

<?php

namespace app\repositories;

use app\models\TodoModel;

class TodoRepository {
   
   
    public static function 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值