>  기사  >  PHP 프레임워크  >  ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석

咔咔
咔咔원래의
2020-12-01 12:01:464205검색
"

라우팅은 프로젝트 개발의 중요한 부분입니다. 모든 프로젝트는 라우팅을 사용하여 인터페이스를 관리합니다. 다음으로 이 기사에서는 소스 코드에서 라우팅을 배우게 됩니다.

"

一, 라우팅 매개변수 및 변수 규칙

동일한 코드가 여기서 시작되지만 이번에는 라우팅 매개변수와 변수 규칙에 중점을 둡니다.

이 두 가지 사항은 사용법과 간단한 실행 과정을 간략하게 설명하기 위한 것입니다.

이 두 가지 사항은 일반적인 개발 과정에서 자주 사용되지 않기 때문에 더 깊은 이해를 위해 설명하지 않겠습니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
라우팅 규칙 등록

위에서 파일 thinkphp/library/think/route/RuleItem.php에서 라우팅 매개변수의 사용을 본 것을 기억하세요!

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
라우팅 매개변수 처리에 대하여

그리고 문서에는 아래와 같이 지원되는 매개변수도 많이 제공됩니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
문서에서 지원하는 매개변수

이 라우팅 매개변수를 사용하는 방법은 다음과 같습니다!

그런 다음 이전에 사용한 경로를 사용하고 여러 접미사 일치를 지원하도록 URL 접미사 감지를 설정합니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
Routing Case

그렇다면 우리가 설정한 경로에 어떻게 접근해야 할까요?

일반적인 라우팅 규칙에 따라 접속할 경우 오류가 발생하여 올바른 접속 방법을 확인하시기 바랍니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
액세스 결과

올바른 요청 주소는 http://www.source.com/index.php/hello/1.html이어야 합니다. 즉, 우리가 설정한 접미사 html을 요청 주소에 연결해야 합니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
액세스 결과

이 블록의 구체적인 실행 과정은 코드 추적기를 사용하여 간단히 살펴볼 수 있습니다. Kaka는 여기서 설명하지 않습니다.

라우팅 매개변수와 관련하여 Kaka가 여기서 사례를 보여줄 것이며 기본적으로 끝났습니다.

전역 라우팅 매개변수

이 라우팅 매개변수 섹션에서 마지막으로 설명하는 것은 전역 라우팅 매개변수입니다.

문서로 바로 이동하여 보실 수 있습니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
전역 라우팅 매개변수

여기서 Kaka는 테스트를 위해 두 개의 라우팅 규칙을 설정합니다. 하나는 선택 매개변수이고 다른 하나는 필수 매개변수이며 라우팅 규칙은 파일 접미사를 추가하도록 설정됩니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
라우팅 파일

파라미터 전달 시 요청 주소입니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
액세스 결과

매개변수를 전달하지 않고 주소를 요청합니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
접속 결과

위는 라우팅 매개변수에 대해 작성한 내용입니다.

특별히 자세한 설명은 없습니다. 기본적으로 사용법만 설명되어 있으니 그냥 이해해주세요.

변수 규칙

동일한 변수 규칙은 Kaka의 일상적인 개발 작업에서는 훨씬 더 적게 사용 가능합니다.

변수 규칙 KaKa는 유일한 이점은 매개변수를 필터링하는 것이라고 믿습니다.

즉, 변수 규칙은 라우팅 규칙에 매개변수가 있는 경우에만 존재하는 동작입니다.

Kaka는 여기서 간단한 케이스를 제공합니다.

데모 케이스

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
라우팅 파일 데모 사례

라우트 뒤에 매개변수 추가pattern

그럼 이 요청을 어떻게 작성하는지 살펴보겠습니다.

파라미터가 숫자인 경우 들어오는 매개변수가 출력될 수 있습니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
처음으로 주소요청

단, 문자를 입력하면 오류가 뜹니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
결과 인쇄

따라서 변수 규칙은 라우팅 규칙 다음에 매개변수를 필터링하는 것이며 정규식을 사용하여 처리됩니다.

지금까지는 라우팅 매개변수와 변수 규칙에 대해 간단히 언급했습니다.

내용은 매우 간단하지만 대부분 사용법을 소개하기 위한 유스 케이스이며, 소스 코드에 대한 심층적인 연구가 없습니다.

일단, 일상적인 개발 중에는 거의 사용하지 않습니다.

둘째, 다음 글에서 좀 더 자세히 이해해야 합니다. 여기서는 일반적인 이해에 불과합니다.

실제로 말하면, 라우팅 주소를 입력할 때 왜 내부 내용이 나타날 수 있는지 아직도 이해하지 못하는 분들이 많은 것으로 추정됩니다.

2. 리소스 라우팅

리소스 라우팅 설정도 매우 간단합니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
파일 라우팅

명령줄을 사용하여 파일을 만드는 것도 더 편리합니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
명령을 사용하여 파일 생성

생성된 컨트롤러 자체가 리소스 라우팅 파일입니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
리소스 라우팅 컨트롤러

그러면 Route 파일의 리소스 메소드가 계속 실행됩니다.

이 방법에는 라우팅 규칙, 라우팅 주소, 라우팅 매개변수 및 변수 규칙도 있습니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
리소스 라우팅 등록

그럼 thinkphp/library/think/route/Resource.php수업

으로 오세요. 이번 수업에서는 시간에 맞춰 간단한 속성 할당을 해보겠습니다.

그럼 카카가 동그라미 친 곳이 있습니다. 다음으로 카카가 동그라미 친 곳을 설명하겠습니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
thinkphp/library/think/route/Resource.php

리소스 클래스는 RuleGroup 클래스를 상속하므로 thinkphp/library/think/route/RuleGroup.php 클래스로 점프합니다.

이 방법으로 수행되는 작업을 수행하십시오.

  • 경로에 매개변수가 있는 경우 라우팅 규칙을 blog/<name> 또는 blog/<name></name></name>blog/<name> 或者 blog/<name></name></name>
  • 接着就是对$this->parent解释,这里为什么是object(thinkrouteDomain)
  • 다음은 $this->parent에 대한 설명입니다. object(thinkrouteDomain), 라우팅해야 함 이 문서의 첫 번째 섹션 3과 fullName이 이 단계에서 할당됩니다.
마지막 단계는 fullName에 값을 할당하는 것입니다. 실제로는 fullName에 라우팅 규칙을 할당하는 것입니다.
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석

그룹의 라우팅 규칙을 설정하세요

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석 그런 다음 상위 레이어로 돌아가서 다음 작업을 확인하세요.

상위 파일로 돌아가 소스코드를 계속해서 읽어보세요

  • 그룹의 라우팅 규칙을 설정한 후 일부 속성, 주로 다음 세 가지에 값을 할당해야 합니다.
  • 라우팅 변수 규칙
  • 라우팅 매개변수
REST 라우팅 방법 정의

속성 할당에 대해서는 말할 것도 없고, 해당 속성이 무엇을 하는지 이해하면 됩니다.

다음 단계는 요청 메소드를 키 값으로 사용하고 $this를 값으로 사용하여 이 클래스의 인스턴스를 반환하고 이 라우팅 메소드가 주석 라우팅인지 확인하는 것입니다.
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석반환된 결과는 모든 사람이 간략하게 볼 수 있도록 인쇄됩니다. 내용은 가로채지 않았으므로 값이 무엇인지만 알면 됩니다.

결과 반환

🎜🎜위 실행 후 상위 레이어로 돌아가 게으른 메서드를 실행합니다🎜

먼저 전달된 매개변수가 무엇인지 알아보세요. 파싱 시 경로가 지연되는지 여부

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
상위 레이어로 돌아가는 코드를 실행한 후

그러면 게으른 메소드가 나옵니다

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
lazy method

이 메서드에는 Call ParseGroupRule이 있으며 전달된 매개 변수는 그룹의 라우팅 규칙이므로 이 섹션에서는 라우팅 그룹화에 대해 다루지 않습니다.

그룹 라우팅 규칙ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
지금까지 리소스 라우팅에 대해 간략하게 이야기하겠습니다

마지막으로 카카가 모두를 위한 실행 마인드맵을 그려드립니다

리소스 이유 실행 프로세스ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석

사실 이전 섹션에 이런 코드가 있습니다

$this->parent->getDomain() 메소드 이름에 따르면 이 코드 라인은 요청한 도메인 이름

그런데 이 도메인 이름이 어디에 설정되어 있는지 다들 아시죠?

이 리소스 경로를 요청하면 Route 클래스의 생성자가 실행됩니다

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
리소스 라우팅

요청된 도메인 이름을 가져오는 생성자에 다음과 같은 코드 줄이 있습니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
생성자

가 호스트 메서드로 이동합니다

호스트 메서드에서 다음과 같습니다. 매개변수는 true

여기만 주의하면 됩니다$ this->server(' HTTP_HOST')를 사용하면 도메인 이름 주소를 얻을 수 있습니다$this->server('HTTP_HOST')即可,就是用来获取域名地址的

在咔咔圈出来的第二处可以看到,第一个条件是成立的,但是第二个条件是不成立的

所以会直接返回上一步获取出来的$this->host

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
host方法

打印$this->host,这里为什么会执行俩次就不对此解释了,有疑问的可以使用函数debug_backtrace

카카가 동그라미 친 두 번째 부분을 보면 첫 번째 조건은 성립했지만 두 번째 조건은 성립하지 않은 것을 볼 수 있습니다
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석 따라서 $this-&gt ;호스트
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
호스트 방법

Print$this- >host, 왜 두 번 실행되는지 설명하지 않겠습니다. 궁금한 점이 있으면 debug_backtrace를 확인하세요.

🎜🎜🎜결과를 인쇄하세요🎜🎜🎜그러면 기본 도메인 이름을 초기화하는 방법이 실행됩니다🎜🎜여기서 도메인 이름이 초기화됩니다🎜
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
기본 도메인 이름 방법을 초기화합니다

이때 분명히 thinkphp/library/think/route/Resource.php이 클래스에서 실행됩니다! thinkphp/library/think/route/Resource.php这个类里边执行的啊!

设置域名地址是在thinkphp/library/think/Route.php

thinkphp/library/think / Route.php가 이 클래스에 있습니다!

생각해보면 바로 상속관계 때문이라는 걸 알 수 있죠!
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
thinkphp/library/think/route/Resource.php

이 시점에서 이 도메인 이름의 설정이 매우 명확해야 합니다. 그래도 이해가 되지 않는다면 Kaka가 작성한 기사를 더 읽어보세요!

Kaka 기사를 작성하는 데는 몇 시간이 걸리지만 읽는 데는 몇 분 밖에 걸리지 않습니다.

코드 작업을 천천히 진행하세요. 원하는 것은 효율성이 아니라 품질입니다!

이제까지 도메인 이름이 설정되는 시점에 대한 설명을 마쳤습니다. 다음으로 라우팅 구성-배열 구성

4. 라우팅 구성-배열 구성 해석

사실입니다. , 여기 읽은 후 많은 사람들이 약간 혼란 스러울 것으로 예상됩니다.

대부분은 이것이 무엇을 의미하는지, 이것이 어디에 있는지 이해하지 못합니다!

사실 이 구성은 5.1 이후에만 가능했습니다. 이전 버전에는 이 구성이 없었습니다.

이 구성의 위치는 실제로 우리가 연구했던 경로 내부에 있을 것이라고 예상하지 못했습니다! 그 만큼 강력합니다.

라우팅 구성에서의 복귀입니다. 🎜
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
라우팅 구성 파일

라우팅 파일 로드를 검토해 보겠습니다!

첫 번째는 항목 파일입니다. 이에 대해서는 의심의 여지가 없습니다.

원으로 표시된 부분은 App의 인스턴스를 반환합니다. 이해가 되지 않으면 컨테이너에 대한 기사를 읽어보세요.

따라서 이 코드 줄은 App 클래스의 run 메서드에 실행됩니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
항목 파일

그럼 이 클래스의 실행 메소드를 살펴보겠습니다. thinkphp/library/think/App.php

직접 볼 수 있는 것이 초기화 어플리케이션입니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석초기화 애플리케이션
초기화 애플리케이션에 오시면 Route 초기화에 대해 보실 수 있습니다

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석Route 초기화
routeInit 메소드로 오세요

라우팅 구성을 가져올 때 이에 대한 판단이 있습니다. 여기서 판단은 라우팅 구성 파일의 어레이 구성을 기반으로 합니다.

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석라우팅 구성 가져오기
이 시점에서는 라우팅 구성이 로드되는 시점을 어느 정도 이해해야 합니다.

하지만 문서에는 어레이 모드에서 라우팅을 구성하는 것에 대한 언급이 없습니다. 이는 사용 사례가 없음을 의미합니다.

그래서 가져오기 추적합니다. import这个方法进行追踪。

直接找到使用方法即可。

这里关于$this->route->import($rules);这行代码,咔咔在做一次解释。

其实也就是$this->route为什么可以执行到Route类。

首先我们需要先知道的就是App类是继承这Container类的

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
继承关系

然后在Container类的最后存在几个魔术方法。

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
Container魔术方法

当App中调用不存在的Route类时就会执行这个__get这个魔术方法。

然后就会执行__get魔术方法中的make方法。

关于这个方法,咔咔说过了不下三次了,可以去看容器那一篇文章哈!

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
容器类中的make方法

接着继续我们的行军之路,来到thinkphp/library/think/Route.php的导入配置文件的路由规则,方法import

사용 방법만 알아보세요. 🎜🎜$this->route-> import($rules);Kaka가 이 코드 줄을 설명하고 있습니다. 🎜🎜실제로는 $this->route code>Route 클래스로 실행될 수 있는 이유는 무엇입니까? 🎜🎜먼저 알아야 할 것은 App 클래스가 Container 클래스를 상속한다는 것입니다🎜
상속 관계
🎜 그런 다음 Container 클래스 끝에는 여러 가지 매직 메서드가 있습니다. 🎜
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
컨테이너 매직 방법 / figcaption>
🎜앱에서 존재하지 않는 Route 클래스가 호출되면 __get 매직 메서드가 실행됩니다. 🎜🎜그러면 __get 매직 메서드의 make 메서드가 실행됩니다. 🎜🎜 이 방법에 대해 Kaka는 컨테이너에 대한 기사를 세 번 이상 읽었습니다. 🎜
ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
컨테이너 클래스에서 make method
🎜그런 다음 행진을 계속하여 thinkphp/library/think/Route.php는 구성 파일의 라우팅 규칙인 가져오기🎜

이 방법에서 몇 가지 친숙한 변수 규칙을 볼 수 있습니다

그런 다음 간단한 테스트에 이 값을 사용하세요

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
가져온 구성 파일의 라우팅 규칙을 감지합니다

두 번째 섹션에서 리소스 라우팅에 대해 설명한 후 테스트 조건으로 리소스 라우팅 확인을 사용하세요

이전에 설정된 리소스 라우팅 구성을 꺼야 합니다. 그렇지 않으면 테스트할 수 없습니다

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
라우팅 구성 파일

이렇게 진행하세요 시간 한 번만 방문

네 그렇죠 사용법이 너무 간단해요

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
결과 조회

실제로 배열 메소드 구성 라우팅은 리소스 라우팅과 동일하고 실행 순서일 뿐입니다

결국 , 전달됩니다. 라우팅 규칙을 리소스 메서드

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
Execute 리소스

이 또한 실행되는 메서드입니다

ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석
resource 메서드

이 섹션에서는 이에 대해 간략하게 설명합니다. 라우트 초기화에 대한 특정 필요성을 이해하고

라우팅 배열 구성을 사용하는 방법을 배웁니다

이 방법은 이전 버전인 5.1이나 출시된 버전 6.0에서는 자주 사용되지 않으며, 전혀 사용되지 않을 것이라고도 할 수 있습니다

여기서 언급하는 이유는 라우팅 초기화 프로세스를 검토하고 어레이 구성 라우팅의 용도가 무엇인지 알아보기 위함입니다.

질문이 있는 경우 해결하지 않은 채로 두지 말고 해결해야 합니다

위 내용은 ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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