글이 길어져서 새로운 글로 작성하겠습니다.
이전 글에서는 다음과 같은 내용을 설명해 드렸습니다.
하지만 라우팅에 대해서는 아직 설명할 내용이 많고 다음 내용을 분석해 보겠습니다.
다음 내용을 하나씩 자세히 설명하겠습니다.
또한 참고하실 수 있도록 라우팅에 대한 실행 다이어그램도 제공합니다.
이 부분의 내용은 실행 애플리케이션 내부에 있습니다. 다음으로 카카가 여러분을 데려갈 것입니다. 간단한 과정을 통해 서로 알아가세요.
이 섹션에서는 소스 코드에 대한 설명이 없으며 기사의 나머지 부분을 설명하기 위해 사용되므로 디스패치가 무엇인지 알아야 합니다.
아래 그림은 라우팅 초기화 후 실행을 계속하기 위해 상위 레이어로 돌아가는 과정을 보여줍니다.
그러면 라우팅 감지가 실행됩니다.
라우팅 테스트는 다음 그림을 사용합니다
그러면 이 스케줄링 정보를 인쇄할 수 있습니다
위 사진에는 발송 관련 값이 인쇄되어 있습니다
다음으로 routeCheck
방법
에 대한 간단한 미리보기를 진행하겠습니다. 이 단계에서 캐시가 처리되고 Dispatch 객체를 반환한다는 것은 분명합니다.
이 작품의 소스 코드를 간단히 살펴보실 수 있으며 그다지 중요하지 않습니다.
route-check는 URL 라우팅을 감지합니다
하지만 여전히 이 내용을 간략하게 살펴봐야 합니다.
보기 전에 전달된 두 매개 변수가 무엇인지 명확히 해야 합니다.
매개변수 1: 라우팅 규칙 매개변수 2: 필수 라우팅이 구성되었는지 확인
매개변수의 의미를 알고 나면 확인 방법으로 이동하여 알아내야 합니다.
이 방법에서는 도메인 이름 라우팅 자동 감지와 관련하여 데이터가 어떻게 보이는지 인쇄해 보겠습니다.
실제로 반환된 결과는 이전 리소스 경로 마운트 방법과 동일합니다.
그러면 pathinfo 구분 기호가 사용됩니다. URL에서 /를 |
로 변경하면 됩니다. 구성 파일 획득 경로가 완전히 일치하는지
최종 실행은 기본 경로 분석을 사용하는 것입니다
여기의 세부 사항은 라우팅에 대한 세부 사항이 너무 많아서 하나씩 자세히 분석됩니다. 필요합니다. 시간이 많이 걸립니다.
이번 글은 여기까지입니다. 무엇이 실행되고 무엇이 최종적으로 반환되는지만 알면 됩니다.
이전 섹션에서 $result = $domain->check($this->request, $url, $completeMatch);
에서는 이 부분의 콘텐츠를 실행합니다.
우리는 이 방법이 여기서 무엇을 수행하는지 상관하지 않습니다.
하지만 신경쓰셔야 할 것은$this->request
발견되어 실행되는지 여부입니다.
가장 먼저 볼 수 있는 것은 Route 클래스에 요청 속성이 존재한다는 것입니다.
그런 다음 Route 생성자로 오세요. 그곳에서 새로운 세계를 발견하게 될 것입니다.
여기에서는 ArrayAccess를 사용하여 배열처럼 객체에 접근하는데, $app에 request 속성이 존재하지 않으므로 컨테이너 클래스의 __get 매직 메소드가 __get 메소드에서 호출됩니다. 첫 번째 매개변수는 request이며 요청 인스턴스는 결국 반환됩니다.
여기의 $app은 실제로 종속성 주입을 통해 들어오는 App 인스턴스입니다.
너무 많은 소스 코드를 읽은 후에 App 클래스가 컨테이너 클래스인 Container 클래스를 상속한다는 것을 알아야 합니다.
컨테이너 클래스 하단에는 여러 가지 매직 메소드가 있습니다.
여기서는 __get 메소드에만 주의하면 됩니다.
__get 메소드는 존재하지 않는 속성에 접근할 때 실행되는 함수입니다.
즉, make 메소드가 결국 실행된다는 것입니다.
이 메소드는 일련의 작업을 거쳐 최종적으로 Request 인스턴스를 반환합니다.
그리고 이 인스턴스를 컨테이너에 저장하고 다음에 사용할 때 직접 가져옵니다.
컨테이너 클래스의 make 메소드는 컨테이너 클래스에서 특히 중요한 메소드이면서 soul 메소드이기도 합니다.
전체 프레임워크의 인스턴스는 컨테이너를 통해 반환되므로 이 방법의 중요성은 말할 필요도 없습니다.
Kaka는 이전에도 컨테이너에 대해 매우 깊은 이해를 갖고 있었으며 이를 기사 형식으로 모든 사람에게 제시했습니다.
먼저 프로세스를 그려보고 프로세스의 리듬을 따라가겠습니다.
먼저 확인해야 할 것은 실행 애플리케이션에서 도메인 이름 라우팅 탐지가 수행된다는 점입니다.
상위 실행 프로세스는 엔트리 파일이 있는 곳입니다.
먼저 코드는 routeCheck
이 방법에서는 먼저 이 파일을 살펴보세요. routeCheck
这个方法里边,那么就先看这个文件。
先看注释,对这个方法的解释就是URL路由检测。
在这个方法里边先是会对路由缓存进行检测,这块内容就是关于Cache的。
在这个方法里边最重要的的就是路由检测 返回一个Dispatch对象
먼저 명확히 해야 할 것은 전달된 두 매개변수가 무엇인지입니다.
는 URL 라우팅을 감지할 때 다음 작업을 수행합니다.
그런 다음 확인만 하면 됩니다. 도메인 이름 라우팅 프로세스에 대한 심층 분석.
처음 두 실행은 문자열 처리에 불과합니다. 살펴보고 결국 무엇이 반환될지 알아보세요.
또한 도메인 이름 라우팅 감지 실행에서 세 가지 매개변수의 의미를 명확히 합니다.
来到$result = $domain->check($this->request, $url, $completeMatch);
$result = $domain->check($this->request, $url, $completeMatch);
이 섹션의 초점은 다음과 같습니다. 🎜🎜이 방법에서는 다음 프로세스가 실행되며 중요한 실행 프로세스가 심층적으로 분석됩니다. 🎜경로 별칭 감지: checkRouteAlias
매개변수 설명
이 방법에는 두 가지가 있습니다 지식 명확히 해야 할 점
라우트 별칭 감지 방법이 있으니 살펴봐야 합니다
파라미터는 위 사진에서 전달한 블로그입니다
이 메서드에서 가장 먼저 분명히 해야 할 것은 이 메서드가 클래스thinkphp/library/think/Route.php
thinkphp/library/think/Route.php
中
并且此类使用了thinkroute下的所有类
这个方法就会把从检测路由过来的blog然后会在Route类中的alias属性里边进行获取,如果不存在则会返回NULL
这个别名的使用会在下文中提到
来到检测别名路由的最后return $item ? $item->check($request, $url) : false;
也就是这行代码,从上图中就可以知道,这个item就是NULL
并且最终将这个NULL给返回回去。
检测URL绑定:checkUrlBind
参数说明
在这个方法中只对下图咔咔圈出来的地方进行详解。
来到方法getBind
return $item ? $item->check($request, $url) : false ;
위 그림에서 볼 수 있듯이 이 항목은 NULL🎜🎜이며 이 NULL이 결국 반환됩니다. 🎜🎜URL 바인딩 감지: checkUrlBind🎜🎜매개변수 설명🎜getBind
라우팅 바인딩을 읽은 후 KaKa가 수신 매개변수를 인쇄한 것을 볼 수 있습니다. 🎜이 방법은 thinkphp/library/think/route / Domain.php
클래스에서 이 클래스는 라우팅 규칙을 설정할 때 $This->group에서 사용된다는 점을 기억하세요. 모르는 경우 라우팅 기사의 첫 번째 섹션을 읽어보세요. thinkphp/library/think/route/Domain.php
这个类里边,还记得在设置路由规则的$This->group就是使用的这个类,不知道的可以去看路由文章的第一节。
同时在这个方法中会进行一次subDomain
subDomain code>현재 하위 도메인 이름을 가져옵니다. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>이 방법은 결국 www를 반환하게 되며, 주로 첫 번째 원으로 표시된 부분을 살펴봅니다. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>요청 클래스의 호스트 메소드를 통해 현재 도메인 이름을 가져온 후 분할합니다. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>반환 데이터: array(1) { [0] =>n string(3) "www"n}<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>하위 도메인 이름에 값 할당: $this->subDomain<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>최종 결과를 반환하고 반환 하위 도메인 이름: www<figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"> <img src="https://img.php.cn/upload/image/298/771/135/1606795677271859.png" title="1606795677271859.png" alt="ThinkPHP는 URL 라우팅 심층 분석을 감지합니다."><figcaption style="max-width:90%"></figcaption>현재 하위 도메인 이름 가져오기</figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>그런 다음 상위 계층이 획득한 현재 하위 도메인 이름 WWW를 판단하는 상위 계층으로 돌아갑니다. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>일부는 모두 판단 처리입니다. 왜냐하면 www만 반환되기 때문입니다. <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>아래 판단은 라우팅 바인딩을 기반으로 합니다. 여기서는 가장 일반적인 NULL만 반환하면 됩니다. <figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;"><img src="https://img.php.cn/upload/image/485/525/920/1606795680508886.png" title="1606795680508886.png" alt="ThinkPHP는 URL 라우팅 심층 분석을 감지합니다."><figcaption style="max-width:90%"></figcaption>이 내린 판단은 하위 레이어에서 NULL이 반환된다는 것을 알고 있으므로 여기서의 판단도 성립되지 않으므로 상위 레이어에 반환되는 최종 결과는 false입니다. </figure><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"></p>
<figure data-tool="mdnice编辑器" style="margin: 0; margin-top: 10px; margin-bottom: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-radius: 16px; overflow: hidden;">URL 바인딩 감지<img src="https://img.php.cn/upload/image/315/355/403/1606795691202713.png" title="1606795691202713.png" alt="ThinkPHP는 URL 라우팅 심층 분석을 감지합니다."><figcaption style="max-width:90%"></figcaption></figure>라우팅 매개변수 결정<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"><span style="font-weight: 700; color: rgb(248, 57, 41);"><p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">위 그림에 따르면 실행 프로세스는 결국 <code style="font-size: 14px; word-wrap: break-word; padding: 2px 4px; border-radius: 4px; margin: 0 2px; background로 돌아갑니다. -color: rgba(27,31,35,.05); 글꼴 계열: Operator Mono, Consolas, Monaco, Menlo, monospace; word-break: break-all; 색상: rgb(271, 93, 108); >thinkphp/ library/think/route/Domain.php
이 방법은thinkphp/library/think/route/Domain.php
这个方法check
检测域名路由。
然后开始进行判断路由参数。
没有路由参数跳过不执行。
存在路由参数:执行方法setRouteVars :设置路由变量 这个参数是在框架版本5.1.5以上才可以使用,由于咔咔使用的版本有点低,就不对其详解了。
添加域名中间件
关于中间件这里也不对其进行解释,因为后期会新开一篇文章来详解,本文还是以路由为重点哈!
检测分组路由
接着就会来到检测域名路由的最后一个流程,执行代码return parent::check($request, $url, $completeMatch);
会跳转到类文件:thinkphp/library/think/route/RuleGroup.php
return parent::check($request, $url , $completeMatch);
🎜🎜 클래스로 점프합니다파일: thinkphp/library/think/route/RuleGroup.php
, 왜냐하면 Domain 클래스가 RuleGroup 클래스를 상속하기 때문입니다. 🎜🎜매개변수 설명🎜이 방법에서 KaKa는 여기에서 그중 하나만 일치합니다. 그룹화 매개변수를 병합하는 과정, 즉 프로세스를 자세히 설명합니다.
이 방법도 실행 과정 전체의 주요 라인이고 나머지는 감지 및 판단을위한 방법이기 때문입니다.
라우팅에 대해 두 편의 글을 썼는데 소스 코드를 오랫동안 읽어도 아직 끝나지 않았습니다. 이해하기 어려운 부분.
클래스가 차례로 연결됩니다. 라우팅은 여기서 일시적으로 학습되며, 나중에 다른 소스 코드를 읽을 때 다른 내용이 추가됩니다.
라우팅 글에서 주로 실행되는 흐름도를 주의 깊게 읽어야 합니다.
라우팅 규칙 등록 시 최종적으로 반환되는 것은 그룹 속성을 통한 Domain 클래스입니다. 여기에 있는 내용은 명확해야 합니다.
라우팅 시 도메인 이름 구성 과정과 도메인 이름 구성 시기를 주로 알아보세요.
라우팅 파일의 반환 배열과 라우팅 파일을 가져오는 과정에 대한 명확한 아이디어가 있어야 합니다.
그럼 앞서 배운 ArrayAccess를 복습하고 배열과 같은 객체에 접근해 보겠습니다.
컨테이너의 매직 메소드 __get 메소드 이 매직 메소드에는 주로 클래스의 인스턴스를 반환하고 컨테이너에 저장하는 데 사용되는 make 메소드가 있습니다.
이제 라우팅 측면에 대한 내용은 한 글로 마치겠습니다.
“배움에 대한 끈기, 블로그에 대한 끈기, 공유에 대한 끈기는 Kaka가 경력을 시작한 이래로 항상 지켜온 신념입니다. Kaka의 Nuoda 인터넷 기사가 여러분에게 조금이나마 도움이 되기를 바랍니다. 카카예요 다음호에서 만나요 .
”
위 내용은 ThinkPHP는 URL 라우팅 심층 분석을 감지합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!