"라우팅은 프로젝트 개발의 중요한 부분입니다. 모든 프로젝트는 라우팅을 사용하여 인터페이스를 관리합니다. 다음으로 이 기사에서는 소스 코드에서 라우팅을 배우게 됩니다.
"
동일한 코드가 여기서 시작되지만 이번에는 라우팅 매개변수와 변수 규칙에 중점을 둡니다.
이 두 가지 사항은 사용법과 간단한 실행 과정을 간략하게 설명하기 위한 것입니다.
이 두 가지 사항은 일반적인 개발 과정에서 자주 사용되지 않기 때문에 더 깊은 이해를 위해 설명하지 않겠습니다.
위에서 파일 thinkphp/library/think/route/RuleItem.php
에서 라우팅 매개변수의 사용을 본 것을 기억하세요!
그리고 문서에는 아래와 같이 지원되는 매개변수도 많이 제공됩니다.
이 라우팅 매개변수를 사용하는 방법은 다음과 같습니다!
그런 다음 이전에 사용한 경로를 사용하고 여러 접미사 일치를 지원하도록 URL 접미사 감지를 설정합니다.
그렇다면 우리가 설정한 경로에 어떻게 접근해야 할까요?
일반적인 라우팅 규칙에 따라 접속할 경우 오류가 발생하여 올바른 접속 방법을 확인하시기 바랍니다.
올바른 요청 주소는 http://www.source.com/index.php/hello/1.html
이어야 합니다. 즉, 우리가 설정한 접미사 html을 요청 주소에 연결해야 합니다.
이 블록의 구체적인 실행 과정은 코드 추적기를 사용하여 간단히 살펴볼 수 있습니다. Kaka는 여기서 설명하지 않습니다.
라우팅 매개변수와 관련하여 Kaka가 여기서 사례를 보여줄 것이며 기본적으로 끝났습니다.
전역 라우팅 매개변수
이 라우팅 매개변수 섹션에서 마지막으로 설명하는 것은 전역 라우팅 매개변수입니다.
문서로 바로 이동하여 보실 수 있습니다.
여기서 Kaka는 테스트를 위해 두 개의 라우팅 규칙을 설정합니다. 하나는 선택 매개변수이고 다른 하나는 필수 매개변수이며 라우팅 규칙은 파일 접미사를 추가하도록 설정됩니다.
파라미터 전달 시 요청 주소입니다.
매개변수를 전달하지 않고 주소를 요청합니다.
위는 라우팅 매개변수에 대해 작성한 내용입니다.
특별히 자세한 설명은 없습니다. 기본적으로 사용법만 설명되어 있으니 그냥 이해해주세요.
변수 규칙
동일한 변수 규칙은 Kaka의 일상적인 개발 작업에서는 훨씬 더 적게 사용 가능합니다.
변수 규칙 KaKa는 유일한 이점은 매개변수를 필터링하는 것이라고 믿습니다.
즉, 변수 규칙은 라우팅 규칙에 매개변수가 있는 경우에만 존재하는 동작입니다.
Kaka는 여기서 간단한 케이스를 제공합니다.
데모 케이스
라우트 뒤에 매개변수 추가pattern
그럼 이 요청을 어떻게 작성하는지 살펴보겠습니다.
파라미터가 숫자인 경우 들어오는 매개변수가 출력될 수 있습니다.
단, 문자를 입력하면 오류가 뜹니다.
따라서 변수 규칙은 라우팅 규칙 다음에 매개변수를 필터링하는 것이며 정규식을 사용하여 처리됩니다.
지금까지는 라우팅 매개변수와 변수 규칙에 대해 간단히 언급했습니다.
내용은 매우 간단하지만 대부분 사용법을 소개하기 위한 유스 케이스이며, 소스 코드에 대한 심층적인 연구가 없습니다.
일단, 일상적인 개발 중에는 거의 사용하지 않습니다.
둘째, 다음 글에서 좀 더 자세히 이해해야 합니다. 여기서는 일반적인 이해에 불과합니다.
실제로 말하면, 라우팅 주소를 입력할 때 왜 내부 내용이 나타날 수 있는지 아직도 이해하지 못하는 분들이 많은 것으로 추정됩니다.
리소스 라우팅 설정도 매우 간단합니다.
명령줄을 사용하여 파일을 만드는 것도 더 편리합니다.
생성된 컨트롤러 자체가 리소스 라우팅 파일입니다.
그러면 Route 파일의 리소스 메소드가 계속 실행됩니다.
이 방법에는 라우팅 규칙, 라우팅 주소, 라우팅 매개변수 및 변수 규칙도 있습니다.
그럼 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>
object(thinkrouteDomain)
그룹의 라우팅 규칙을 설정하세요
상위 파일로 돌아가 소스코드를 계속해서 읽어보세요
결과 반환
🎜🎜위 실행 후 상위 레이어로 돌아가 게으른 메서드를 실행합니다🎜먼저 전달된 매개변수가 무엇인지 알아보세요. 파싱 시 경로가 지연되는지 여부
그러면 게으른 메소드가 나옵니다
이 메서드에는 Call ParseGroupRule이 있으며 전달된 매개 변수는 그룹의 라우팅 규칙이므로 이 섹션에서는 라우팅 그룹화에 대해 다루지 않습니다.
마지막으로 카카가 모두를 위한 실행 마인드맵을 그려드립니다
$this->parent->getDomain()
메소드 이름에 따르면 이 코드 라인은 요청한 도메인 이름
그런데 이 도메인 이름이 어디에 설정되어 있는지 다들 아시죠?
이 리소스 경로를 요청하면 Route 클래스의 생성자가 실행됩니다
요청된 도메인 이름을 가져오는 생성자에 다음과 같은 코드 줄이 있습니다.
가 호스트 메서드로 이동합니다
호스트 메서드에서 다음과 같습니다. 매개변수는 true
여기만 주의하면 됩니다$ this->server(' HTTP_HOST')
를 사용하면 도메인 이름 주소를 얻을 수 있습니다$this->server('HTTP_HOST')
即可,就是用来获取域名地址的
在咔咔圈出来的第二处可以看到,第一个条件是成立的,但是第二个条件是不成立的
所以会直接返回上一步获取出来的$this->host
打印$this->host
,这里为什么会执行俩次就不对此解释了,有疑问的可以使用函数debug_backtrace
Print$this- >host
, 왜 두 번 실행되는지 설명하지 않겠습니다. 궁금한 점이 있으면 debug_backtrace
를 확인하세요.
이때 분명히 thinkphp/library/think/route/Resource.php
이 클래스에서 실행됩니다! thinkphp/library/think/route/Resource.php
这个类里边执行的啊!
设置域名地址是在thinkphp/library/think/Route.php
thinkphp/library/think / Route.php
가 이 클래스에 있습니다! 생각해보면 바로 상속관계 때문이라는 걸 알 수 있죠! 이 시점에서 이 도메인 이름의 설정이 매우 명확해야 합니다. 그래도 이해가 되지 않는다면 Kaka가 작성한 기사를 더 읽어보세요! Kaka 기사를 작성하는 데는 몇 시간이 걸리지만 읽는 데는 몇 분 밖에 걸리지 않습니다. 코드 작업을 천천히 진행하세요. 원하는 것은 효율성이 아니라 품질입니다! 이제까지 도메인 이름이 설정되는 시점에 대한 설명을 마쳤습니다. 다음으로 라우팅 구성-배열 구성 라우팅 파일 로드를 검토해 보겠습니다!
첫 번째는 항목 파일입니다. 이에 대해서는 의심의 여지가 없습니다.
원으로 표시된 부분은 App의 인스턴스를 반환합니다. 이해가 되지 않으면 컨테이너에 대한 기사를 읽어보세요.
따라서 이 코드 줄은 App 클래스의 run 메서드에 실행됩니다.
그럼 이 클래스의 실행 메소드를 살펴보겠습니다. thinkphp/library/think/App.php
그래서 가져오기
추적합니다. import
这个方法进行追踪。
直接找到使用方法即可。
这里关于$this->route->import($rules);
这行代码,咔咔在做一次解释。
其实也就是$this->route
为什么可以执行到Route类。
首先我们需要先知道的就是App类是继承这Container类的
然后在Container类的最后存在几个魔术方法。
当App中调用不存在的Route类时就会执行这个__get这个魔术方法。
然后就会执行__get魔术方法中的make方法。
关于这个方法,咔咔说过了不下三次了,可以去看容器那一篇文章哈!
接着继续我们的行军之路,来到thinkphp/library/think/Route.php
的导入配置文件的路由规则,方法import
$this->route-> import($rules);
Kaka가 이 코드 줄을 설명하고 있습니다. 🎜🎜실제로는 $this->route code>Route 클래스로 실행될 수 있는 이유는 무엇입니까? 🎜🎜먼저 알아야 할 것은 App 클래스가 Container 클래스를 상속한다는 것입니다🎜🎜 그런 다음 Container 클래스 끝에는 여러 가지 매직 메서드가 있습니다. 🎜🎜앱에서 존재하지 않는 Route 클래스가 호출되면 __get 매직 메서드가 실행됩니다. 🎜🎜그러면 __get 매직 메서드의 make 메서드가 실행됩니다. 🎜🎜 이 방법에 대해 Kaka는 컨테이너에 대한 기사를 세 번 이상 읽었습니다. 🎜🎜그런 다음 행진을 계속하여 thinkphp/library/think/Route.php
는 구성 파일의 라우팅 규칙인 가져오기
🎜이 방법에서 몇 가지 친숙한 변수 규칙을 볼 수 있습니다
그런 다음 간단한 테스트에 이 값을 사용하세요
두 번째 섹션에서 리소스 라우팅에 대해 설명한 후 테스트 조건으로 리소스 라우팅 확인을 사용하세요
이전에 설정된 리소스 라우팅 구성을 꺼야 합니다. 그렇지 않으면 테스트할 수 없습니다
이렇게 진행하세요 시간 한 번만 방문
네 그렇죠 사용법이 너무 간단해요
실제로 배열 메소드 구성 라우팅은 리소스 라우팅과 동일하고 실행 순서일 뿐입니다
결국 , 전달됩니다. 라우팅 규칙을 리소스 메서드
이 또한 실행되는 메서드입니다
이 섹션에서는 이에 대해 간략하게 설명합니다. 라우트 초기화에 대한 특정 필요성을 이해하고
라우팅 배열 구성을 사용하는 방법을 배웁니다
이 방법은 이전 버전인 5.1이나 출시된 버전 6.0에서는 자주 사용되지 않으며, 전혀 사용되지 않을 것이라고도 할 수 있습니다
여기서 언급하는 이유는 라우팅 초기화 프로세스를 검토하고 어레이 구성 라우팅의 용도가 무엇인지 알아보기 위함입니다.
질문이 있는 경우 해결하지 않은 채로 두지 말고 해결해야 합니다
위 내용은 ThinkPHP 라우팅 매개변수 및 리소스 라우팅 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!