入门篇 - Blog 应用快速构建

知识库
知识库文档
/tech-stacks/cakephp/tutorial/入门篇 - Blog 应用快速构建.md

文档

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. 思考题

  1. 如何为 Articles 添加 belongsTo('Users') 关联?
  2. 如何使用 CakePHP 的 Authentication 插件实现登录?
  3. 如何使用 find('published') 自定义查询方法?

信息

路径
/tech-stacks/cakephp/tutorial/入门篇 - Blog 应用快速构建.md
更新时间
2026/5/31