文档
CakePHP 入门教程:Blog 应用快速构建
1. 背景
CakePHP 以"约定优于配置"著称,Bake CLI 能在几分钟内生成完整的 Blog 应用。本教程展示 CakePHP 的核心开发体验。
2. 前置概念
| 概念 | 说明 |
|---|---|
| Bake | CLI 代码生成器,按表结构生成 MVC |
| 命名约定 | 表名复数(articles)、控制器 ArticlesController |
| Entity | 代表一行数据,含访问器和修改器 |
| Table | 数据表对象,含业务逻辑和验证 |
3. 分步操作
步骤一:创建数据库
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created DATETIME,
modified DATETIME
);
CREATE TABLE articles (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
slug VARCHAR(191) NOT NULL UNIQUE,
body TEXT,
published BOOLEAN DEFAULT FALSE,
created DATETIME,
modified DATETIME,
FOREIGN KEY (user_id) REFERENCES users(id)
);
步骤二:配置数据库
config/app_local.php 中设置数据库连接信息。
步骤三:Bake 全部代码
# 生成所有表的 Model
bin/cake bake model all
# 生成 Articles 的 CRUD
bin/cake bake controller Articles
bin/cake bake template Articles
# 生成 Users 的 CRUD
bin/cake bake controller Users
bin/cake bake template Users
就这么简单!完整的 Blog 应用已生成。
步骤四:自定义 Model 验证
src/Model/Table/ArticlesTable.php:
public function validationDefault(Validator $validator): Validator
{
$validator
->notEmptyString('title', 'Title is required')
->minLength('title', 3, 'Title must be at least 3 characters')
->maxLength('title', 255)
->notEmptyString('body', 'Body is required')
->minLength('body', 10);
return $validator;
}
public function beforeSave(EventInterface $event, EntityInterface $entity, ArrayObject $options)
{
if ($entity->isNew() && !$entity->slug) {
$entity->slug = Text::slug($entity->title);
}
}
步骤五:启动测试
bin/cake server
# 访问 http://localhost:8765/articles
4. 验证
完整 CRUD 页面已可用:
GET /articles— 文章列表GET /articles/add— 创建表单GET /articles/view/1— 文章详情GET /articles/edit/1— 编辑表单POST /articles/delete/1— 删除文章
5. 思考题
- 如何为 Articles 添加
belongsTo('Users')关联? - 如何使用 CakePHP 的 Authentication 插件实现登录?
- 如何使用
find('published')自定义查询方法?