CakePHP
技术栈
后端框架
phprapid-developmentbakeconvention-over-configurationorm安装
1. 环境准备
- OS:Linux / macOS / Windows
- PHP:>= 8.1(CakePHP 5)
- PHP 扩展:mbstring, intl, simplexml, PDO
- Composer:最新稳定版
- 数据库:MySQL 5.7+ / PostgreSQL 10+ / SQLite 3.8+
- Node.js & npm(可选,前端资源编译)
2. 安装命令
创建项目
composer create-project cakephp/app:5.x my-app
cd my-app
配置数据库
编辑 config/app_local.php:
'Datasources' => [
'default' => [
'className' => Cake\Database\Connection::class,
'driver' => Cake\Database\Driver\Mysql::class,
'host' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'cake_demo',
'encoding' => 'utf8mb4',
],
],
迁移数据库
bin/cake migrations migrate
启动开发服务器
bin/cake server
# 访问 http://localhost:8765
3. 常见安装问题
缺少 intl 扩展
# Ubuntu/Debian
sudo apt install php8.2-intl
# macOS
brew install php@8.2
权限问题
# Linux/macOS
chmod -R 775 tmp logs
Bake 命令不可用
composer require --dev cakephp/bake
国内镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
示例
Hello World:CakePHP 控制器与 Bake
目标
创建 CakePHP 控制器,展示手动和 Bake 两种方式。
完整代码
1. 手动创建 src/Controller/HelloController.php
<?php
namespace App\Controller;
use Cake\Http\Response;
class HelloController extends AppController
{
public function initialize(): void
{
parent::initialize();
// 允许未认证访问
$this->Authentication->allowUnauthenticated(['index', 'greet']);
}
public function index(): Response
{
$data = [
'message' => 'Hello, Vibe!',
'framework' => 'CakePHP',
'php_version' => PHP_VERSION,
'timestamp' => date('c'),
];
return $this->response
->withType('application/json')
->withStringBody(json_encode($data, JSON_PRETTY_PRINT));
}
public function greet(string $name): Response
{
$data = [
'message' => "Hello, {$name}!",
'powered_by' => 'CakePHP',
];
return $this->response
->withType('application/json')
->withStringBody(json_encode($data));
}
}
2. 路由(config/routes.php)
$routes->scope('/', function (RouteBuilder $builder) {
$builder->connect('/hello', ['controller' => 'Hello', 'action' => 'index']);
$builder->connect('/hello/{name}', ['controller' => 'Hello', 'action' => 'greet'])
->setPass(['name']);
});
3. 使用 Bake 快速生成(可选)
# 先创建数据库表
bin/cake bake controller Hello
bin/cake bake template Hello
运行步骤
bin/cake server
预期输出
curl http://localhost:8765/hello
# {"message":"Hello, Vibe!","framework":"CakePHP","php_version":"8.2.0","timestamp":"..."}
curl http://localhost:8765/hello/World
# {"message":"Hello, World!","powered_by":"CakePHP"}
教程
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')自定义查询方法?
参考资料
- [1] CakePHP Team. CakePHP Cookbook. 2024. https://book.cakephp.org
- [2] CakePHP Team. CakePHP GitHub Repository. 2024. https://github.com/cakephp/cakephp
- [3] A. Miller, M. Lisecki. Rapid Application Development with CakePHP. 2018.