이 기사는 PHP MVC 프레임워크의 라우터(Router)가 어떻게 작동하는지(코드 포함)에 대한 기사를 제공합니다. 내용이 매우 좋습니다. 도움이 필요한 모든 사람에게 도움이 되기를 바랍니다.
설명: SF 번역 카테고리에 버그가 있는 것 같아 이 글은 원문 카테고리에 올려드립니다.
MVC 라우터 또는 디스패처는 HTTP 요청의 URL을 감지하고 단일 URL 구성 요소를 컨트롤러 및 컨트롤러에 정의된 메서드와 일치시키는 동시에 메서드의 모든 매개 변수를 전달합니다.
라우터 작동 방식을 대략적으로 설명하기 위해 간단한 라우터 클래스가 아래에 제공됩니다. 그러나 실제 프로젝트에서 라우터는 더 많은 일을 처리해야 하기 때문에 아래 예시 라우터보다 훨씬 더 복잡합니다.
<?php class SimpleRouter { // 路由数组,存储我们定义的路由 private $routes; // 这个方法用于将定义的路由加入到 $routes 数组 function add_route($route, callback $closure) { $this->routes[$route] = $closure; } // 执行特定的路由 function execute() { $path = $_SERVER['PATH_INFO']; /** * 检测给定路由是否被定义, * 或者执行默认的 '/' 首页路由。 */ if (array_key_exists($path, $this->route)) { $this->route[$path](); } else { $this->route['/](); } } }
SimpleRouter 클래스는 MVC 라우터의 단순화된 모델입니다. 주요 기능은 각 사용자 정의 경로를 배열에 추가하고 실행하는 것입니다. 작동 방식을 이해하려면 아래 코드를 index.php 파일에 복사하세요.
<?php // index.php class SimpleRouter { // 路由数组,存储我们定义的路由 private $routes; // 这个方法用于将定义的路由加入到 $routes 数组 function add_route($route, callback $closure) { $this->routes[$route] = $closure; } // 执行特定的路由 function execute() { $path = $_SERVER['PATH_INFO']; /** * 检测给定路由是否被定义, * 或者执行默认的 '/' 首页路由。 */ if (array_key_exists($path, $this->route)) { $this->route[$path](); } else { $this->route['/](); } } } /* 创建 Router 实例 */ $router = new SimpleRouter(); /* 添加首页闭包值路由器 */ $router->add_route('/', function(){ echo 'Hello World'; }); /* 添加另一个闭包路由 */ $router->add_route('/greetings', function(){ echo 'Greetings, my fellow men.'; }); /* 添加可回调函数作为路由 */ $router->add_route('/callback', 'myFunction'); /* 回调函数处理程序 */ function myFunction(){ echo "This is a callback function named '" . __FUNCTION__ ."'"; } /* 执行路由 */ $router->execute();
이제 브라우저로 이동하여 다음 URL을 방문하세요.
http://localhost/index.php/ http://localhost/index.php/greetings http://localhost/index.php/callback
각 URL에 대해 경로에 정의된 다른 메시지가 표시됩니다. 그러면 라우터는 어떻게 작동하나요?
이 예에서 add_route 메소드는 URL의 경로 이름(route)을 라우팅 배열에 추가하고 해당 처리 작업을 정의합니다. . 이 처리 작업은 클로저로 전달되는 간단한 함수 또는 콜백 함수일 수 있습니다. 이제 라우터의 execute 메소드를 실행하면 현재 $routes 배열에서 경로가 일치하는지 감지하고 일치하는 경우 이 함수나 콜백을 실행합니다. 기능.
var_dump 이 $routes 배열을 사용하면 배열의 구체적인 내용을 볼 수 있습니다. 정의된 각 경로에 대해 클로저가 이와 연관되어 저장됩니다.
array (size=3) '/' => object(Closure)[2] '/greetings' => object(Closure)[3] '/callback' => string 'myFunction' (length=10)
실행 처리는 다음과 같이 완료됩니다. $this->routes[$path]** 문은 **$routes 배열에 저장되고 경로 실행을 지정하는 데 사용되는 클로저를 반환합니다. ().
$this->routes[$path](); // 或 $this->routes['/']();
위의 예는 단순히 라우터의 작동 방식을 보여줍니다. 단순화를 위해 오류를 처리하지 않으며 라우팅 보안을 고려하지 않습니다.
관련 권장 사항:
PHP MVC 프레임워크 라우팅 연구 노트, mvc 프레임워크 라우팅 연구 노트
위 내용은 PHP MVC 프레임워크의 라우터는 어떻게 작동합니까(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!