페이지 컨트롤러 디자인 패턴은 웹 기반 시스템에 사용되는 일반적인 아키텍처 접근 방식입니다. 개별 페이지 또는 요청에 대한 논리를 처리하기 위해 특정 컨트롤러를 전용으로 지정하여 제어 흐름을 구성합니다. 이 접근 방식은 책임을 분리하여 코드베이스를 더 쉽게 유지 관리하고 발전시키는 데 도움이 됩니다.
페이지 컨트롤러 패턴에서 각 페이지(또는 비슷한 동작을 하는 페이지 그룹)에는 다음을 담당하는 자체 컨트롤러가 있습니다.
일반적인 구현에는 다음 구성 요소가 포함됩니다.
흐름
파일 구조
/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) ?>
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"; } }
홈컨트롤러
홈페이지 로직을 처리합니다.
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