创建并运行 CakePHP 项目
什么是 CakePHP?
CakePHP 是一个开源的 PHP Web 框架,旨在帮助开发人员快速构建 Web 应用程序。它基于 MVC(模型-视图-控制器)架构,提供了一套强大的工具集,简化了开发过程中的常见任务,如数据库交互、表单处理、认证和会话管理等。
CakePHP 的主要特性和优势
- 快速开发:提供了丰富的代码生成工具,帮助开发者快速生成常见的代码结构。
- 灵活且强大的 ORM:内置的 ORM(对象关系映射)层简化了数据库操作。
- 安全性:内置了多种安全特性,如输入验证、CSRF 保护和 SQL 注入防护。
- 社区支持:拥有活跃的社区和丰富的插件生态系统。
- 良好的文档:提供了详尽的文档和教程,帮助开发者快速上手。
CakePHP 适用于从小型应用到大型企业级系统的各种项目,帮助开发者快速构建高质量的 Web 应用。
使用 ServBay 创建并运行 CakePHP 项目
在这篇文章中,我们将使用 ServBay 提供的 PHP 环境来创建并运行一个 CakePHP 项目。我们将利用 ServBay 的『主机』功能来设置 Web 服务器,并通过简单的配置实现项目的访问。
注意:如果你曾经是 NGINX 或 Apache 的用户
ServBay 默认使用 Caddy 作为 Web 服务器。对于从 NGINX 和 Apache 迁移到 ServBay 的用户,有一些关键变动点需要注意:
Caddy 配置
ServBay 已经内置了 Caddy,并且默认配置已经优化和调试好。开发者只需通过 ServBay 的『主机』功能来管理站点,无需手动修改 Caddy 配置文件。
Rewrite 规则和 .htaccess
在 NGINX 和 Apache 中,开发者通常需要自己编写 Rewrite 规则和 .htaccess 文件来处理 URL 重写和其他配置。然而,ServBay 出厂时已经配置好了 Caddy 的规则,因此,除非有特殊需求,否则开发者无需自己编写这些规则。
了解更多
更多相关信息,请参阅Rewrite与htaccess、Apache网站如何迁移到ServBay、NGINX网站如何迁移到ServBay。
创建 CakePHP 项目
TIP
ServBay 建议开发者把网站放置在/Applications/ServBay/www
目录下,以方便管理。
安装 Composer
ServBay 出厂时已经自带 Composer,无需单独安装。
创建 CakePHP 项目
使用 Composer 创建一个新的 CakePHP 项目:
bashcd /Applications/ServBay/www mkdir servbay-cakephp-app cd servbay-cakephp-app composer create-project --prefer-dist cakephp/app .
1
2
3
4进入项目目录
进入新创建的 CakePHP 项目目录:
bashcd /Applications/ServBay/www/servbay-cakephp-app
1
初始化配置
配置环境变量
在
config/app_local.php
文件中配置数据库连接信息和其他环境变量。确保以下配置已正确设置:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
配置 Web 服务器
使用 ServBay 的『主机』功能,通过 Web 服务器来访问 CakePHP 项目。在 ServBay 的『主机』设置中,添加一个新的主机:
- 名字:
My First CakePHP Dev Site
- 域名:
servbay-cakephp-test.local
- 网站类型:
PHP
- PHP 版本:选择
8.3
- 网站根目录:
/Applications/ServBay/www/servbay-cakephp-app/webroot
详细设置步骤请参考 添加第一个网站。
添加示例代码
在 config/routes.php
文件中添加以下代码,以输出 "Hello ServBay!":
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
在 src/Controller/PagesController.php
文件中添加以下代码:
namespace App\Controller;
use Cake\Http\Response;
class PagesController extends AppController
{
public function display()
{
return new Response(['body' => 'Hello ServBay!']);
}
}
2
3
4
5
6
7
8
9
10
11
访问网站
打开浏览器,访问 https://servbay-cakephp-test.local
,你会看到网页输出 Hello ServBay!
。
NoSQL数据库示例
Memcached 示例
安装 Memcached 扩展
在 ServBay 中,Memcached 扩展已经预装好,无需额外安装。
配置 Memcached
在
config/app_local.php
文件中配置 Memcached 连接信息:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\MemcachedEngine', 'servers' => ['127.0.0.1'], ], ],
1
2
3
4
5
6配置路由
在
config/routes.php
文件中添加以下代码:php$routes->connect('/memcached', ['controller' => 'Pages', 'action' => 'memcached']);
1使用 Memcached
在控制器中使用缓存:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function memcached() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Memcached!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17打开浏览器,访问
https://servbay-cakephp-test.local/memcached
Redis 示例
安装 Redis 扩展
在 ServBay 中,Redis 扩展已经预装好,无需额外安装。
配置 Redis
在
config/app_local.php
文件中配置 Redis 连接信息:php'Cache' => [ 'default' => [ 'className' => 'Cake\Cache\Engine\RedisEngine', 'server' => '127.0.0.1', 'port' => 6379, ], ],
1
2
3
4
5
6
7配置路由
在
config/routes.php
文件中添加以下代码:php$routes->connect('/redis', ['controller' => 'Pages', 'action' => 'redis']);
1使用 Redis
在控制器中使用缓存:
phpuse Cake\Cache\Cache; class PagesController extends AppController { public function redis() { $cacheKey = 'my_cache_key'; $cachedData = Cache::read($cacheKey); if (!$cachedData) { $cachedData = 'Hello Redis!'; Cache::write($cacheKey, $cachedData); } return new Response(['body' => $cachedData]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17打开浏览器,访问
https://servbay-cakephp-test.local/redis
关系型数据库示例
创建数据库结构和迁移文件
创建迁移文件
使用 CakePHP 的 Bake 工具创建迁移文件:
bashbin/cake bake migration CreateUsers name:string email:string:unique
1运行迁移
使用 CakePHP 命令运行迁移,创建数据库表:
bashbin/cake migrations migrate
1
MySQL 示例
配置 MySQL
在
config/app_local.php
文件中配置 MySQL 连接信息:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9配置路由
在
config/routes.php
文件中添加以下代码:php$routes->connect('/mysql-add', ['controller' => 'Pages', 'action' => 'mysqlAdd']); $routes->connect('/mysql', ['controller' => 'Pages', 'action' => 'mysql']);
1
2添加User表
将下面的代码,保存到
src/Model/Table/UsersTable.php
文件中。php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8写入用户数据
在控制器中写入用户数据:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function mysqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function mysql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25打开浏览器,访问
https://servbay-cakephp-test.local/mysql-add
和https://servbay-cakephp-test.local/mysql
PostgreSQL 示例
配置 PostgreSQL
在
config/app_local.php
文件中配置 PostgreSQL 连接信息:php'Datasources' => [ 'default' => [ 'host' => '127.0.0.1', 'driver' => Postgres::Class, 'username' => 'root', 'password' => 'password', 'database' => 'servbay_cakephp_app', 'url' => env('DATABASE_URL', null), ], ],
1
2
3
4
5
6
7
8
9
10配置路由
在
config/routes.php
文件中添加以下代码:php$routes->connect('/pgsql-add', ['controller' => 'Pages', 'action' => 'pgsqlAdd']); $routes->connect('/pgsql', ['controller' => 'Pages', 'action' => 'pgsql']);
1
2添加User表
将下面的代码,保存到
src/Model/Table/UsersTable.php
文件中。php<?php namespace App\Model\Table; use Cake\ORM\Table; class UsersTable extends Table { }
1
2
3
4
5
6
7
8写入用户数据
在控制器中写入用户数据:
phpuse App\Model\Entity\User; use Cake\ORM\TableRegistry; class PagesController extends AppController { public function pgsqlAdd() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $user = $usersTable->newEntity(['name' => 'ServBay', 'email' => '[email protected]']); if ($usersTable->save($user)) { return new Response(['body' => 'User added']); } return new Response(['body' => 'Failed to add user']); } public function pgsql() { $usersTable = TableRegistry::getTableLocator()->get('Users'); $users = $usersTable->find()->all(); return new Response(['body' => json_encode($users)]); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25打开浏览器,访问
https://servbay-cakephp-test.local/pgsql-add
和https://servbay-cakephp-test.local/pgsql
通过以上步骤,您成功创建并运行了一个 CakePHP 项目,并使用 ServBay 提供的功能来管理和访问您的项目,同时连接了多种数据库并调用数据。