Yii
技术栈
后端框架
phphigh-performancegiirbacrestmvc安装
1. 环境准备
- OS:Linux / macOS / Windows
- PHP:>= 7.4(Yii2),>= 8.1(Yii3)
- PHP 扩展:PDO, mbstring, JSON, OpenSSL, Intl
- Composer:最新稳定版
- 数据库:MySQL 5.7+ / PostgreSQL 9.6+ / SQLite
- 可选:Node.js(前端资源编译)
2. 安装命令
Yii2 基础模板
composer create-project yiisoft/yii2-app-basic my-app
Yii2 高级模板(前后端分离)
composer create-project yiisoft/yii2-app-advanced my-app
cd my-app
php init
Yii3(新一代)
composer create-project yiisoft/app my-app
启动开发服务器
cd my-app
php yii serve
# 访问 http://localhost:8080
3. 常见安装问题
初始化环境选择
php init
# 选择 0 (Development) 或 1 (Production)
数据库配置
编辑 config/db.php:
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];
Composer asset 插件
composer global require "fxp/composer-asset-plugin:^1.4"
国内镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
示例
Hello World:Yii2 控制器与视图
目标
创建 Yii2 控制器,展示两种响应方式:JSON API 和 HTML 视图。
完整代码
1. 使用 Gii 生成控制器(可选)
访问 http://localhost:8080/gii,使用 Controller Generator。
2. 手动创建 controllers/HelloController.php
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\web\Response;
class HelloController extends Controller
{
/**
* JSON API 端点
*/
public function actionIndex(): array
{
Yii::$app->response->format = Response::FORMAT_JSON;
return [
'message' => 'Hello, Vibe!',
'framework' => 'Yii2',
'php_version' => PHP_VERSION,
'timestamp' => date('c'),
];
}
/**
* HTML 视图
*/
public function actionView(string $name = 'World'): string
{
return $this->render('view', [
'name' => $name,
'framework' => 'Yii2',
]);
}
/**
* 带参数 JSON
*/
public function actionGreet(string $name): array
{
Yii::$app->response->format = Response::FORMAT_JSON;
return [
'message' => "Hello, {$name}!",
'powered_by' => 'Yii Framework',
];
}
}
3. 创建视图 views/hello/view.php
<?php
/** @var string $name */
/** @var string $framework */
?>
<h1>Hello, <?= htmlspecialchars($name) ?>!</h1>
<p>Powered by <strong><?= htmlspecialchars($framework) ?></strong></p>
<p>PHP Version: <?= PHP_VERSION ?></p>
运行步骤
php yii serve
预期输出
# JSON 端点
curl http://localhost:8080/index.php?r=hello/index
# {"message":"Hello, Vibe!","framework":"Yii2","php_version":"8.2.0","timestamp":"..."}
# 带参数
curl http://localhost:8080/index.php?r=hello/greet\&name=Vibe
# {"message":"Hello, Vibe!","powered_by":"Yii Framework"}
# HTML 视图
# 浏览器访问 http://localhost:8080/index.php?r=hello/view&name=Vibe
# 渲染 "Hello, Vibe! Powered by Yii2"
提示:Yii2 可用 URL 美化消除
index.php?r=,在config/web.php中启用urlManager组件。`
教程
Yii2 入门教程:Gii 代码生成器实战
1. 背景
Gii 是 Yii2 最强大的功能之一——可视化/命令行代码生成器。本教程通过 Gii 快速生成完整的 CRUD 模块,展示 Yii 的"少写代码"哲学。
2. 前置概念
| 概念 | 说明 |
|---|---|
| Gii | Web 代码生成器,自动生成 Model/CRUD/Module |
| ActiveRecord | Yii 的 ORM 实现,一行代码 CRUD |
| GridView | 数据表格 Widget,支持排序/分页/过滤 |
3. 分步操作
步骤一:创建数据库表
CREATE TABLE product (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(128) NOT NULL,
price DECIMAL(10,2) NOT NULL DEFAULT 0.00,
description TEXT,
category VARCHAR(64),
stock INT DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
步骤二:配置数据库
config/db.php:
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii_demo',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
];
步骤三:启用 Gii 模块(开发环境)
config/web.php:
if (YII_ENV_DEV) {
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
步骤四:使用 Gii 生成代码
访问 http://localhost:8080/index.php?r=gii
a) 生成 Model
- 点击 "Model Generator"
- Table Name:
product - Model Class:
Product - 点击 Generate
b) 生成 CRUD
- 点击 "CRUD Generator"
- Model Class:
app\models\Product - Controller Class:
app\controllers\ProductController - 点击 Generate
就这样,完整的增删改查模块已生成!
步骤五:访问 CRUD
php yii serve
# 访问 http://localhost:8080/index.php?r=product
你将看到一个完整的数据表格,支持创建、编辑、删除、排序、分页和搜索。
4. 自定义生成代码
编辑 models/Product.php 添加规则:
public function rules()
{
return [
[['name', 'price'], 'required'],
['name', 'string', 'max' => 128],
['price', 'number', 'min' => 0],
['stock', 'integer', 'min' => 0],
['category', 'in', 'range' => ['Electronics', 'Clothing', 'Food', 'Books']],
['description', 'string', 'max' => 500],
];
}
5. 思考题
- 如何让 GridView 的 category 列显示为下拉过滤?
- 如何使用 Behavior 自动填充 created_at/updated_at?
- 如何将 Yii2 的 URL 美化应用到 CRUD 路由?
参考资料
- [1] Yii Team. Yii Framework Documentation. 2024. https://www.yiiframework.com/doc
- [2] Mark Safronov, Alexander Makarov. Web Application Development with Yii 2. 2014.
- [3] Andrew Bogdanov, Dmitry Eliseev, Alexander Makarov. Yii2 Application Development Cookbook. 2016.