PHP 라우팅 기술의 원리와 실제

WBOY
풀어 주다: 2016-07-30 13:30:59
원래의
1070명이 탐색했습니다.

0x00 라우팅 구현 원리

사용자는 지정된 URL 패러다임을 통해 백엔드에 액세스한 후 URL 라우팅 처리 클래스로 전달되어 요청 결과를 반환합니다. 사용자.

URL 패러다임 및 규칙에 동의

검색 엔진 및 사용자 친화적인 일련의 URL 규칙에 동의

URL 처리 클래스(예: 라우팅 구현의 핵심 )

사용자가 요청한 URL을 파싱하고, 사용자가 요청한 클래스, 메소드, Query 매개변수를 얻어와 요청을 논리적 처리 클래스로 전달합니다.

로직 처리 클래스

는 웹사이트의 실제 비즈니스 로직을 처리합니다.

0x01 URL 패러다임 규칙

현재 널리 사용되는 두 가지 URL 형식이 있습니다. 하나는 일반 모드이고 다른 하나는 pathinfo 모드입니다.

일반 모드

ThinkPHP 프레임워크에서 기본 URL 형식은 일반 모드입니다. 일반 모드 URL은

<code>index.php?m=home&c=user&<span>a</span>=login&v=<span>value</span></code>
로그인 후 복사

여기서 m 매개변수 값은 모듈 이름, c 매개변수 값은 컨트롤러 이름, a 매개변수 값은 메소드 이름, 이후 매개변수는 수신할 다른 GET 요청 매개변수입니다.

pathinfo 패턴

CodeIgniter 프레임워크에서 기본 URL 형식은 다음과 같이 pathinfo 패턴입니다.

<code><span>index</span>.php/controller/<span><span>method</span>/<span>prarme1</span>/<span>value1</span></span></code>
로그인 후 복사

의 의미 이 블록도 명확하게 표시되어 있습니다. method에서는 이제부터 메소드가 수신하는 GET 매개변수이며 형식은 名称/值

0x02 URL 라우팅 처리 클래스(core)

여기에서는 다음과 같이 가장 간단한 일반 단일 모듈 모드를 선택합니다.

<code>index.php?c=user&<span>a</span>=login&v=<span>value</span></code>
로그인 후 복사
매개변수

가 컨트롤러의 이름이라는 데 동의합니다. , c 매개변수는 메소드 이름이고 다음은 모두 a 매개변수입니다 GET

<code><span><span><?php</span><span>include</span><span>'index.class.php'</span>;
<span>include</span><span>'user.class.php'</span>;
<span>// 对用户请求URL进行处理</span><span>$query</span> = <span>$_GET</span>;
<span>$controller</span> = <span>isset</span>(<span>$query</span>[<span>'c'</span>]) ? <span>$query</span>[<span>'c'</span>] : <span>'indexController'</span>;
<span>$action</span> = <span>isset</span>(<span>$query</span>[<span>'a'</span>]) ? <span>$query</span>[<span>'a'</span>] : <span>'index'</span>;
<span>if</span> (class_exists(<span>$controller</span>)) {
    <span>if</span> (method_exists(<span>$controller</span>, <span>$action</span>)) {

        <span>unset</span>(<span>$_GET</span>[<span>'c'</span>]);
        <span>unset</span>(<span>$_GET</span>[<span>'a'</span>]);
        <span>// 实例化用户请求类并调用方法</span>
        (<span>new</span><span>$controller</span>())-><span>$action</span>();

    } <span>else</span> {
        <span>echo</span><span>'控制器'</span> . <span>$controller</span> . <span>'中不存在方法'</span> . <span>$action</span>;
    }
} <span>else</span> {
    <span>echo</span><span>'不存在控制器'</span> . <span>$controller</span>;
}</span></span></code>
로그인 후 복사
그 중

는 두 개의 get 매개변수를 제거하여 메소드에 다른 영향을 줍니다. 실제로 호출되는 것입니다. unset()

0x03 로직 처리 클래스

로직 처리 클래스는 최종 비즈니스 로직으로, 실제로 사용자 요청에 응답하는 코드 조각입니다. 다음은 단순한 예일 뿐입니다.

<code><span>/* index.class.php 文件源码 */</span><span><?php</span><span><span>class</span><span>indexController</span> {</span><span>public</span><span><span>function</span><span>index</span><span>()</span>{</span>
        var_dump(<span>$_GET</span>);
    }
}</code>
로그인 후 복사
<code><span>/* user.class.php 文件源码 */</span><span><?php</span><span><span>class</span><span>user</span> {</span><span>public</span><span><span>function</span><span>index</span><span>()</span> {</span><span>echo</span><span>'这里是User控制器'</span>;
    }

    <span>public</span><span><span>function</span><span>login</span><span>()</span> {</span>
        var_dump(<span>$_GET</span>);
    }
}</code>
로그인 후 복사
0x04 End

이것은 가장 간단한 PHP 라우팅 기술의 원리일 뿐 실제로 실제로 개발이 가능할 수도 있습니다. 프로젝트나 프레임워크에 대한 라우팅은 여러 복잡한 상황과 호환되어야 하며 다양한 상황을 고려해야 합니다.

원작자: 저는 얼량입니다

원문링크 : http://www.2liang.me/?p=230
재인쇄물은 텍스트에 표시되어야 하며 원본 링크, 저자 및 기타 정보를 유지해야 합니다.

위 내용은 PHP 라우팅 기술의 원리와 실습을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿