Rumah >pembangunan bahagian belakang >tutorial php >Corak Reka Bentuk PHP: Pengawal Hadapan
Pengawal Depan ialah corak reka bentuk yang digunakan dalam pembangunan aplikasi web untuk memusatkan pengendalian permintaan. Daripada mempunyai berbilang titik masuk untuk bahagian sistem yang berlainan, semua permintaan dihalakan melalui pengawal pusat tunggal, bertanggungjawab untuk mengarahkannya ke komponen atau modul yang sesuai.
/app /Controllers HomeController.php ProductController.php /Core Entrypoint.php /config routes.php /public index.php /vendor composer.json
Untuk melaksanakan PSR-4, buat fail composer.json dalam akar projek:
{ "autoload": { "psr-4": { "App\": "app/" } } }
Jalankan arahan berikut untuk menjana autoloader:
composer dump-autoload
apache(.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; } }
Selepas menyimpan fail konfigurasi, mulakan semula Nginx untuk menggunakan perubahan
sudo systemctl reload nginx
Pengawal Rumah
namespace App\Controllers; class HomeController { public function index(): void { echo "Welcome to the home page!"; } }
Pengawal Produk
namespace App\Controllers; class ProductController { public function list(): void { echo "Product list."; } }
Titik Masuk
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; } }
laluan
$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();
Pelaksanaan ini:
Atas ialah kandungan terperinci Corak Reka Bentuk PHP: Pengawal Hadapan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!