2026 暑訓 / COURSE 02.03
Day 2 - 概覽
從 MVC 到 Convention,掌握 CakePHP 的核心架構與開發思維。
完成 PHP 基礎複習後,接下來正式進入 CakePHP。
CakePHP 是一套 PHP Web Framework,目標是讓常見的網站開發工作更有結構、更容易維護。它提供 MVC、ORM、Routing、Validation、Helpers 等工具,並透過一套固定的命名與目錄規則,降低大量重複設定。
這一天最重要的觀念有三個:
- MVC
- Convention over Configuration
- CakePHP Request Cycle
1. Convention over Configuration
CakePHP 很重要的一個設計理念是:
Convention over Configuration
也就是:
約定優於配置。
CakePHP 對 Controller、Model、Entity、Template、Database Table、Foreign Key 等都有固定的命名習慣。
例如:
Database Table
articles
Table Class
ArticlesTable
Entity
Article
Controller
ArticlesController
Template
templates/Articles/index.php只要遵循這些 Convention,CakePHP 就能自動判斷各個元件之間的關係,不需要寫大量設定。
例如使用者存取:
/articles
CakePHP 可以依照 Convention 找到:
ArticlesController
→ index()
→ templates/Articles/index.php因此,學 CakePHP 時,命名規則非常重要。
2. MVC
CakePHP 採用 MVC 架構:
Model
View
Controller三者各自負責不同工作。
Model
Model 負責資料與 Business Logic,例如:
- 查詢資料
- 新增資料
- 修改資料
- 驗證資料
- 建立資料關聯
例如取得 Users:
$users = $this->fetchTable('Users');
$resultset = $users->find()->all();
foreach ($resultset as $row) {
echo $row->username;
}建立新 User:
$user = $users->newEntity([
'email' => 'mark@example.com'
]);
$users->save($user);CakePHP 會透過 ORM 將 PHP Object 與 Database 資料連接起來。
View
View 負責呈現資料。
例如:
<?php foreach ($resultset as $user): ?>
<li class="user">
<?= $this->element(
'user_info',
['user' => $user]
) ?>
</li>
<?php endforeach; ?>View 不只可以產生 HTML,也可以輸出:
JSON
XML
CSVCakePHP 也提供:
Templates
Elements
Cells
Helpers協助重複使用畫面邏輯。
Controller
Controller 負責處理 Request,並協調 Model 與 View。
例如:
public function add()
{
$user = $this->Users->newEmptyEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity(
$user,
$this->request->getData()
);
if ($this->Users->save($user)) {
$this->Flash->success('註冊成功');
}
}
$this->set('user', $user);
}流程大致是:
Browser
↓
Controller
↓
Model
↓
Database
↓
Controller
↓
View
↓
Browser3. CakePHP Request Cycle
使用者發出 Request 後,並不是直接進入 Controller。
CakePHP 的 Request 大致會經過:
Browser
↓
Web Server
↓
webroot/index.php
↓
Application
↓
Middleware
↓
Routing
↓
Controller
↓
Model
↓
View
↓
Response
↓
Browser其中 Middleware 可以負責:
Error Handling
Routing
Authentication
Authorization之後在登入與權限控制的教學中,會再次看到 Middleware。
4. Controller 命名規則
Controller 使用:
複數 + CamelCase + Controller例如:
UsersController
ArticlesController
MenuLinksControllerController 中的 Public Method 通常會成為 Action。
例如:
public function viewAll()
{
}URL 在預設 DashedRoute 下可能是:
/view-all因此:
viewAll
→ view-all5. Model 命名規則
CakePHP Model 主要分成 Table 與 Entity。
Table
Table 代表一組資料。
例如:
UsersTable
ArticlesTable
MenuLinksTable通常使用:
複數 + CamelCase + TableEntity
Entity 代表單筆資料。
例如:
User
Article
MenuLink使用:
單數 + CamelCase可以簡單記:
ArticlesTable
→ 多篇文章
Article
→ 一篇文章6. Database Convention
CakePHP 對 Database 也有固定命名規則。
Table
Table 通常使用:
複數 + snake_case例如:
users
articles
menu_linksForeign Key
Foreign Key 通常使用:
單數名稱 + _id例如 Users 與 Articles 是一對多:
users
↓
articles.user_id多單字則例如:
menu_links
↓
menu_link_idJoin Table
BelongsToMany 關係通常使用 Join Table。
例如:
Articles ↔ TagsJoin Table:
articles_tags其中通常包含:
article_id
tag_idCakePHP 會依照這些命名規則自動判斷 Model Association。
7. View Template Convention
Template 名稱通常根據 Controller Action 決定。
例如:
public function viewAll()對應:
templates/Articles/view_all.php也就是:
viewAll
→ view_all.php基本規則:
templates/Controller/action_name.php8. CakePHP 專案資料夾
CakePHP Application 主要會看到:
bin
config
logs
src
templates
tests
tmp
vendor
webroot其中最常使用的有:
src/
Application 主要 PHP 程式碼。
例如:
src/Controller
src/Model
src/Middleware
src/Viewtemplates/
存放 View Template。
例如:
templates/Articles/index.php
templates/Articles/add.phpconfig/
Application 設定。
例如:
config/routes.php
config/app_local.phpvendor/
Composer 安裝的 CakePHP 與第三方套件。
通常:
不要直接修改 vendor 裡的程式碼。
因為 Composer 更新時可能會覆蓋內容。
webroot/
網站公開目錄。
通常包含:
CSS
JavaScript
Image
index.phpBrowser 能直接存取的公開資源應該放在這裡。
tmp/ 與 logs/
CakePHP 需要能寫入:
tmp
logs否則可能影響:
Cache
Log
Session
Debug等功能。
這也會使用到 Day 1 學過的 Linux File Permission 概念。
9. CakePHP 專案中該去哪裡修改?
可以先用下面的方式判斷:
處理 Request
→ src/Controller
處理 Database / Business Logic
→ src/Model
修改畫面
→ templates
修改 URL
→ config/routes.php
修改 Database Connection
→ config/app_local.php
公開 CSS / JS / Image
→ webroot熟悉這套結構之後,就比較容易閱讀一個 CakePHP 專案。
10. Day 2 重點整理
今天最重要的概念可以整理成:
Convention over Configuration
↓
遵守 CakePHP 命名規則
↓
Framework 自動建立關聯MVC:
Model
→ Data / Business Logic
View
→ Presentation
Controller
→ Request / CoordinationNaming Convention:
articles
→ ArticlesTable
→ Article
→ ArticlesController
→ templates/Articles/Request Cycle:
Request
→ Middleware
→ Routing
→ Controller
→ Model
→ View
→ Response下一步
理解 CakePHP 的架構與 Convention 之後,下一步就是準備實際的 CakePHP 開發環境。
接下來會進入:
- CakePHP Requirements
- Docker Compose
- Apache
- Database Configuration
- CakePHP Application 部署
完成環境設定後,就會正式開始建立:
CakePHP CMS。
COURSE FILES