>백엔드 개발 >PHP 튜토리얼 >PHP는 단순히 라우팅 Route 기능을 구현합니다.

PHP는 단순히 라우팅 Route 기능을 구현합니다.

Guanhui
Guanhui앞으로
2020-04-30 09:41:0912698검색

네이티브 PHP로 작성된 독립 PHP 프레임워크의 경우 경로 액세스를 달성하기 위해 단일 항목 파일이 사용됩니다. 이때 직면하게 될 주요 문제는 파일의 상호 포함과 그에 따른 라우팅 배포입니다. 웹 개발을 위해 성숙한 PHP 프레임워크를 사용하지 않으면 위의 두 가지 문제가 매우 골치 아픈 문제라는 것을 알게 될 것입니다.

문제 해결 방법:

1. 파일 포함

PHP 파일을 포함하는 방법에는 require와 include 두 가지가 있습니다. 두 가지 방법의 차이점은 파일을 포함하기 위해 require를 사용할 때 심각한 오류가 발생한다는 것입니다. 동시에 PHP 스크립트 실행이 중지됩니다. 파일을 포함하기 위해 include를 사용할 때 오류가 발생하면 경고가 표시되지만 PHP 스크립트는 계속 실행됩니다. 동시에 두 메서드 모두 해당 xxx_once 메서드를 포함하므로 "클래스 선언" 문제를 피할 수 있습니다. 따라서 일반적으로 파일 인클루젼을 사용하는 경우에는 include_once를 사용하여 파일을 인클루드하려고 합니다.

동시에 파일 포함 경로 문제와 관련하여 전역 변수를 설정하는 방법을 사용하면 항목 파일의 절대 경로를 기반으로 다른 경로 파일을 찾을 수 있습니다. 물론 php.ini에서 include_path 경로를 수정하는 것은 다른 방법입니다. 파일을 포함하려면 require 및 include를 사용하십시오. 상대 경로인 경우 php.ini 구성 파일의 include_path 설정에 따라 먼저 검색됩니다.

2. 경로 배포

PHP 기반 경로 배포는 기본적으로 해당 컨트롤 클래스와 일치하도록 URL의 경로를 사용하고 동시에 해당 메서드를 호출하여 관련 작업을 처리합니다.

말 없는 코드:

<?php
/**
 * Author:helen
 * CreateTime: 2016/07/27 10:26
 * Description:
 */
// 权限控制
include_once &#39;./auth.php&#39;;
// 应用入口文件
date_default_timezone_set("Asia/Shanghai");
header(&#39;Content-type: text/html;charset=utf-8&#39;);
// 项目根路径
define(&#39;BASEPATH&#39;, dirname(__FILE__));
// 调试模式
define(&#39;APP_DEBUG&#39;, True);
// 引入配置文件
include_once BASEPATH . &#39;/config/config.php&#39;;
// 路由控制
$router = include_once BASEPATH . &#39;/config/router.php&#39;;
if ($_SERVER[&#39;HTTP_HOST&#39;] !== &#39;xxx.com&#39;) {
    var_dump(&#39;当前host不被允许&#39;);
} else {
    $request_path = str_replace(&#39;/index.php&#39;, &#39;&#39;, $_SERVER[&#39;PHP_SELF&#39;]);
    $request_query = getCurrentQuery();
    if (array_key_exists($request_path, $router)) {
        $module_file = BASEPATH . $router[$request_path][&#39;file_name&#39;];
        $class_name = $router[$request_path][&#39;class_name&#39;];
        $method_name = $router[$request_path][&#39;method_name&#39;];
        if (file_exists($module_file)) {
            include $module_file;
            $obj_module = new $class_name();
            if (!method_exists($obj_module, $method_name)) {
                die("要调用的方法不存在");
            } else {
                if (is_callable(array($obj_module, $method_name))) {
                    $obj_module->$method_name($request_query, $_POST);
                }
            }
        } else {
            die("定义的模块不存在");
        }
    } else {
        echo &#39;页面不存在&#39;;
    }
}

위의 방법을 사용하면 기본 PHP 프레임워크의 라우팅 배포를 구현할 수 있습니다.

추천 튜토리얼: "PHP 튜토리얼"

위 내용은 PHP는 단순히 라우팅 Route 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제