2026 暑訓 / COURSE 02.03

Day 2 - 概覽

從 MVC 到 Convention,掌握 CakePHP 的核心架構與開發思維。

INSTRUCTOR王朝威UPDATED2026.08.23

完成 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
CSV

CakePHP 也提供:

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
↓
Browser

3. 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
MenuLinksController

Controller 中的 Public Method 通常會成為 Action。

例如:

public function viewAll()
{
}

URL 在預設 DashedRoute 下可能是:

/view-all

因此:

viewAll
→ view-all

5. Model 命名規則

CakePHP Model 主要分成 Table 與 Entity。

Table

Table 代表一組資料。

例如:

UsersTable
ArticlesTable
MenuLinksTable

通常使用:

複數 + CamelCase + Table

Entity

Entity 代表單筆資料。

例如:

User
Article
MenuLink

使用:

單數 + CamelCase

可以簡單記:

ArticlesTable
→ 多篇文章

Article
→ 一篇文章

6. Database Convention

CakePHP 對 Database 也有固定命名規則。

Table

Table 通常使用:

複數 + snake_case

例如:

users
articles
menu_links

Foreign Key

Foreign Key 通常使用:

單數名稱 + _id

例如 Users 與 Articles 是一對多:

users
↓
articles.user_id

多單字則例如:

menu_links
↓
menu_link_id

Join Table

BelongsToMany 關係通常使用 Join Table。

例如:

Articles ↔ Tags

Join Table:

articles_tags

其中通常包含:

article_id
tag_id

CakePHP 會依照這些命名規則自動判斷 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.php

8. CakePHP 專案資料夾

CakePHP Application 主要會看到:

bin
config
logs
src
templates
tests
tmp
vendor
webroot

其中最常使用的有:

src/

Application 主要 PHP 程式碼。

例如:

src/Controller
src/Model
src/Middleware
src/View

templates/

存放 View Template。

例如:

templates/Articles/index.php
templates/Articles/add.php

config/

Application 設定。

例如:

config/routes.php
config/app_local.php

vendor/

Composer 安裝的 CakePHP 與第三方套件。

通常:

不要直接修改 vendor 裡的程式碼。

因為 Composer 更新時可能會覆蓋內容。


webroot/

網站公開目錄。

通常包含:

CSS
JavaScript
Image
index.php

Browser 能直接存取的公開資源應該放在這裡。


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 / Coordination

Naming 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

附件下載

FILE2026 CakePHP-Day2 CakePHP概覽.pdf下載 ↓
NEXT COURSE / 02.04Day 2 - 部屬 →