현대 웹 개발에서 라우팅 시스템은 중요한 역할을합니다. URL 주소에 따라 해당 컨트롤러 및 메소드에 대한 사용자 요청을 해결해야합니다. PHP에서 많은 프레임 워크 또는 사용자 정의 시스템은 라우팅 구성 기능을 제공합니다. 요청 처리를보다 유연하고 유지 관리하기 위해 일반적으로 초기화를 위해 라우팅 구성을 INT 기능에 배치합니다.
이 기사는 다양한 요청을 유연하게 처리하고보다 효율적인 코드 구조를 구현하기 위해 PHP의 Init 기능에서 라우팅 시스템을 구성하는 방법을 심층적으로 탐색합니다.
이름에서 알 수 있듯이 init 함수는 프로그램 초기화를위한 입력 기능입니다. PHP에서 일반적으로 응용 프로그램의 시작 프로세스 동안 INT 기능은 필요한 구성 및 초기화 작업을 수행합니다. 주요 기능은 프로그램의 운영 환경을 준비하고 후속 비즈니스 논리를 지원하는 것입니다. 라우팅 시스템에서는 초기 기능의 역할이 특히 중요합니다. 일반적으로 라우팅 규칙을 구성하고 URL을 구문 분석하고 해당 컨트롤러 및 메소드를 할당하는 데 사용됩니다.
PHP 라우팅 시스템의 기본 작업은 사용자가 요청한 URL을 특정 컨트롤러 방법에 매핑하는 것입니다. 간단한 라우팅 시스템에는 일반적으로 몇 가지 구성 요소가 있습니다.
요청 된 URL : 브라우저에서 사용자가 액세스하는 주소.
라우팅 규칙 : URL과 컨트롤러 방법 간의 해당.
컨트롤러 : 요청을 처리하고 응답을 반환하는 논리 장치.
방법 : 컨트롤러의 특정 처리 기능.
일반적인 라우팅 규칙은 다음과 같습니다.
$route->add('/home', 'HomeController@index');
$route->add('/user/{id}', 'UserController@show');
위의 예에서는 사용자가 액세스 /홈에 액세스 할 때 HomeController 의 인덱스 방법이 트리거됩니다. /user /{id} 에 액세스 할 때 UserController 의 쇼 메소드가 트리거되고 ID 매개 변수가 전달됩니다.
간단한 PHP 응용 프로그램이 있다고 가정하면 다음 단계에 따라 INIT 기능에서 라우팅 시스템을 구성 할 수 있습니다.
먼저 모든 라우팅 규칙을 관리하려면 라우팅 클래스가 필요합니다. 이 클래스에는 라우팅 규칙을 추가하고 요청을 일치시키고 해당 컨트롤러 메소드를 실행하는 기능이 포함되어야합니다.
class Router {
protected $routes = [];
public function add($route, $action) {
$this->routes[$route] = $action;
}
public function dispatch($url) {
foreach ($this->routes as $route => $action) {
if ($url == $route) {
list($controller, $method) = explode('@', $action);
return (new $controller)->$method();
}
}
return "404 Not Found";
}
}
다음으로 init 함수에서 라우팅 규칙을 구성 할 수 있습니다. INT 기능은 라우팅 시스템을 초기화하고 모든 요청을 처리 할 책임이 있습니다.
function init() {
$router = new Router();
// 라우팅 규칙을 구성합니다
$router->add('/home', 'HomeController@index');
$router->add('/user/{id}', 'UserController@show');
// 현재 요청을 받으십시오 URL
$url = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
// 라우팅 일치를 트리거합니다
echo $router->dispatch($url);
}
위의 코드에서 init 함수는 먼저 라우터 객체를 생성하고 $ router-> add () 메소드를 통해 라우팅 규칙을 추가합니다. 그런 다음 현재 요청의 URL은 $ _server [ 'request_uri'] 에 의해 얻어지고 일치하기 위해 라우팅 시스템으로 전달됩니다.
라우팅 시스템을보다 유연하게 만들기 위해 동적 라우팅 규칙에 대한 지원을 추가 할 수 있습니다. 예를 들어, 사용자가 /user /{id} 에 액세스 할 때 라우팅 시스템은 URL에서 ID 매개 변수를 추출하여 컨트롤러 메소드로 전달할 수 있어야합니다.
class Router {
protected $routes = [];
public function add($route, $action) {
$this->routes[] = ['route' => $route, 'action' => $action];
}
public function dispatch($url) {
foreach ($this->routes as $route) {
$pattern = preg_replace('/\{(\w+)\}/', '(\w+)', $route['route']);
if (preg_match("#^$pattern$#", $url, $matches)) {
array_shift($matches); // 첫 번째 일치를 삭제하십시오(URL그 자체)
list($controller, $method) = explode('@', $route['action']);
return (new $controller)->$method(...$matches);
}
}
return "404 Not Found";
}
}
이 수정 된 라우터 클래스에서는 정규식을 사용하여 URL의 매개 변수를 동적으로 일치시킵니다. 예를 들어, /user/{id}는 ^/user/(\ w+) $ 로 변환되므로 ID 매개 변수를 URL에서 추출하여 usercontroller@show 메소드로 전달할 수 있습니다.
위의 것을 결합하면 다음은 완전한 PHP 라우팅 시스템의 예입니다.
class Router {
protected $routes = [];
public function add($route, $action) {
$this->routes[] = ['route' => $route, 'action' => $action];
}
public function dispatch($url) {
foreach ($this->routes as $route) {
$pattern = preg_replace('/\{(\w+)\}/', '(\w+)', $route['route']);
if (preg_match("#^$pattern$#", $url, $matches)) {
array_shift($matches); // 첫 번째 일치를 삭제하십시오(URL그 자체)
list($controller, $method) = explode('@', $route['action']);
return (new $controller)->$method(...$matches);
}
}
return "404 Not Found";
}
}
class HomeController {
public function index() {
return "Welcome to the Home Page!";
}
}
class UserController {
public function show($id) {
return "User Profile for ID: $id";
}
}
function init() {
$router = new Router();
$router->add('/home', 'HomeController@index');
$router->add('/user/{id}', 'UserController@show');
$url = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
echo $router->dispatch($url);
}
// 초기화 및 라우팅 처리를 수행하십시오
init();
init 함수에 라우팅 구성을 배치함으로써 유연한 요청 처리를보다 편리하게 수행 할 수 있습니다. 이를 통해 코드의 유지 관리 가능성을 향상시킬뿐만 아니라 프로그램 시작시 필요한 모든 구성이 완료되도록하여 후속 비즈니스 로직 처리가 용이합니다. 이 기사가 PHP에서 라우팅 시스템을 더 잘 이해하고 구현하는 데 도움이되기를 바랍니다.