建立並運行 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 提供的功能來管理和訪問您的專案,同時連接了多種資料庫並調用數據。