>  기사  >  백엔드 개발  >  PHP MVC 프레임워크의 라우터는 어떻게 작동합니까(코드 포함)

PHP MVC 프레임워크의 라우터는 어떻게 작동합니까(코드 포함)

不言
不言원래의
2018-08-01 11:10:163397검색

이 기사는 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 프레임워크로 가는 길 by

위 내용은 PHP MVC 프레임워크의 라우터는 어떻게 작동합니까(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.