页面控制器设计模式是基于 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中文网其他相关文章!