頁面控制器設計模式是基於 Web 的系統中使用的常見架構方法。它透過專用特定控制器來處理單一頁面或請求的邏輯來組織控制流程。這種方法有助於隔離職責,使程式碼庫更易於維護和發展。
在頁面控制器模式中,每個頁面(或一組具有類似行為的頁面)都有自己的控制器,負責:
典型的實作涉及以下元件:
流動
檔案結構
/htdocs /src /Controllers HomeController.php AboutController.php /Services ViewRenderer.php /Views home.html.php about.html.php /public index.php /routes.php composer.json
自動載入器
{ "autoload": { "psr-4": { "App\": "htdocs/" } } }
composer dump-autoload
模板
首頁和about.html.php.
的模板
<!DOCTYPE html> <html> <head> <title><?= htmlspecialchars($title) ?></title> </head> <body> <h1><?= htmlspecialchars($title) ?></h1> <p><?= htmlspecialchars($content) ?></p> </body> </html>
ViewRenderer
namespace App\Services; class ViewRenderer { public function render(string $view, array $data = []): void { extract($data); // Turns array keys into variables include __DIR__ . "/../../Views/{$view}.html.php"; } }
HomeController
處理主頁邏輯。
namespace App\Controllers; use App\Services\ViewRenderer; class HomeController { public function __construct(private ViewRenderer $viewRenderer) { } public function handleRequest(): void { $data = [ 'title' => 'Welcome to the Site', 'content' => 'Homepage content.', ]; $this->viewRenderer->render('home', $data); } }
關於控制器
處理「關於我們」頁面邏輯。
namespace App\Controllers; use App\Services\ViewRenderer; class AboutController { public function __construct(private ViewRenderer $viewRenderer) { } public function handleRequest(): void { $data = [ 'title' => 'About Us', 'content' => 'Information about the company.', ]; $this->viewRenderer->render('about', $data); } }
routes.php
定義到控制器的路由對映。
use App\Controllers\HomeController; use App\Controllers\AboutController; // Define the routes in an associative array return [ '/' => HomeController::class, '/about' => AboutController::class, ];
index.php
應用程式的入口點。
/htdocs /src /Controllers HomeController.php AboutController.php /Services ViewRenderer.php /Views home.html.php about.html.php /public index.php /routes.php composer.json
優點
缺點
對於更複雜的項目,存在大量邏輯重用或多個入口點,前端控制器或完整MVC架構等模式可能更合適。
以上是PHP 設計模式:頁面控制器的詳細內容。更多資訊請關注PHP中文網其他相關文章!