ページ コントローラー デザイン パターンは、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.
のテンプレート
= htmlspecialchars($title) ?> = htmlspecialchars($title) ?>
= htmlspecialchars($content) ?>
ビューレンダラー
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"; } }
ホームコントローラー
ホームページのロジックを処理します。
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
アプリケーションのエントリ ポイント。
require_once __DIR__ . '/../vendor/autoload.php'; use App\Services\ViewRenderer; // Include the routes $routes = require_once __DIR__ . '/../routes.php'; // Instantiate the view rendering service $viewRenderer = new ViewRenderer(); // Get the current route from the request URI $requestUri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); // Check if the route exists and resolve the controller if (isset($routes[$requestUri])) { $controllerClass = $routes[$requestUri]; $controller = new $controllerClass($viewRenderer); $controller->handleRequest(); } else { http_response_code(404); echo "Page not found."; }
利点
デメリット
大幅なロジックの再利用や複数のエントリ ポイントがある、より複雑なプロジェクトの場合は、フロント コントローラーや完全な MVC アーキテクチャのようなパターンがより適している可能性があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3