Front Controller는 웹 애플리케이션 개발에서 요청 처리를 중앙 집중화하기 위해 사용되는 디자인 패턴입니다. 시스템의 다양한 부분에 대해 여러 진입점을 두는 대신 모든 요청은 단일 중앙 컨트롤러를 통해 라우팅되어 적절한 구성 요소나 모듈로 연결됩니다.
/app /Controllers HomeController.php ProductController.php /Core Entrypoint.php /config routes.php /public index.php /vendor composer.json
PSR-4를 구현하려면 프로젝트 루트에 작곡가.json 파일을 생성하세요.
{ "autoload": { "psr-4": { "App\": "app/" } } }
자동 로더를 생성하려면 다음 명령을 실행하세요.
composer dump-autoload
아파치(.htaccess)
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
nginx
server { listen 80; server_name example.com; root /path/to/your/project/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # Adjust for your PHP version fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* \.(css|js|jpg|jpeg|png|gif|ico|woff|woff2|ttf|svg|eot|ttc|otf|webp|avif)$ { expires max; log_not_found off; } location ~ /\.ht { deny all; } }
구성 파일을 저장한 후 Nginx를 다시 시작하여 변경 사항을 적용하세요
sudo systemctl reload nginx
홈컨트롤러
namespace App\Controllers; class HomeController { public function index(): void { echo "Welcome to the home page!"; } }
제품 컨트롤러
namespace App\Controllers; class ProductController { public function list(): void { echo "Product list."; } }
진입점
namespace App\Core; class Entrypoint { public function __construct(private array $routes) { } public function handleRequest(): void { $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); if (isset($this->routes[$uri])) { $route = $this->routes[$uri]; $controller = new $route['controller']; $method = $route['method']; if (method_exists($controller, $method)) { $controller->$method(); } else { $this->sendResponse(500, "Method not found."); } } else { $this->sendResponse(404, "Page not found."); } } private function sendResponse(int $statusCode, string $message): void { http_response_code($statusCode); echo $message; } }
경로
$routes = [ '/' => [ 'controller' => 'HomeController', 'method' => 'index' ], '/products' => [ 'controller' => 'ProductController', 'method' => 'list' ] ];
require_once __DIR__ . '/../vendor/autoload.php'; use App\Core\Entrypoint; $routes = require __DIR__ . '/../config/routes.php'; $entrypoint = new Entrypoint($routes); $entrypoint->handleRequest();
이 구현:
위 내용은 PHP 디자인 패턴: 전면 컨트롤러의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!