0x00 라우팅 구현 원리
사용자는 지정된 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
요청 매개변수입니다.
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()
<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 라우팅 기술의 원리일 뿐 실제로 실제로 개발이 가능할 수도 있습니다. 프로젝트나 프레임워크에 대한 라우팅은 여러 복잡한 상황과 호환되어야 하며 다양한 상황을 고려해야 합니다.
원작자: 저는 얼량입니다위 내용은 PHP 라우팅 기술의 원리와 실습을 포함하여 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.원문링크 : http://www.2liang.me/?p=230
재인쇄물은 텍스트에 표시되어야 하며 원본 링크, 저자 및 기타 정보를 유지해야 합니다.