>  기사  >  백엔드 개발  >  thinkPHP5.0 프레임워크 애플리케이션 구현의 요청 수명주기에 대한 자세한 분석

thinkPHP5.0 프레임워크 애플리케이션 구현의 요청 수명주기에 대한 자세한 분석

黄舟
黄舟원래의
2017-03-27 09:24:591855검색

이 글에서는 주로 thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클을 소개하고, thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클에 관련된 다양한 실행 프로세스를 자세히 분석합니다.

을 참조하세요. 이 글은 thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클을 예시와 함께 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

이 글에서는 개발자가 전체 실행을 이해할 수 있도록 ThinkPHP5.0의 애플리케이션 요청 라이프사이클에 대한 일반적인 소개를 제공합니다. 프로세스.

1. 항목 파일

사용자가 시작한 요청은 애플리케이션의 항목 파일(일반적으로 public/index.php 파일)을 거칩니다. 물론 새 항목 파일을 변경하거나 추가할 수도 있습니다.

일반적으로 항목 파일의 코드는 비교적 간단합니다. 일반적인 항목 파일 코드는 다음과 같습니다.

// 应用入口文件
// 定义项目路径
define('APP_PATH', DIR . '/../application/');
// 加载框架引导文件
require DIR . '/../thinkphp/start.php';

일반 항목 파일에는 일부 상수가 정의되어 있습니다. 지원되는 상수는 다음 내용이나 부록을 참조하세요.

일반적으로 애플리케이션 항목 파일에 너무 많은 코드, 특히 비즈니스 로직과 관련된 코드를 추가하지 않는 것이 좋습니다.

2. 부팅 파일

다음 단계는 실행 프레임워크의 부팅 파일입니다. start.php 파일은 시스템의 기본 부팅 파일입니다. 부팅 파일에서는 다음 작업이 순서대로 수행됩니다.

① 시스템 상수 정의 로드
② 환경 변수 정의 파일 로드
③ 자동 로드 메커니즘 등록
④ 오류 및 예외 처리 메커니즘을 등록합니다.
⑤ 사용자 정의 구성 파일을 로드합니다.
⑥ 애플리케이션을 실행합니다.

애플리케이션 항목 파일에서 기본 부팅 파일이 변경된 경우 위의 실행 과정에 변경 사항이 따를 수 있습니다.

3. 자동 로딩 등록

시스템은 Loader::register() 메소드를 호출하여 자동 로딩을 등록합니다. 🎜> 사양을 충족하는 클래스 라이브러리(Composer가 로딩에 의존하는 타사 클래스 라이브러리 포함)가 자동으로 로드됩니다.

시스템 자동 로딩은 두 부분으로 구성됩니다:

① 등록 시스템의 자동 로딩 방법 thinkLoader::autoload ② 등록 시스템
네임스페이스 정의3 클래스 라이브러리 매핑 파일 로드(존재하는 경우)
4 Composer 설치가 있는 경우 자동 로딩용 Composer 등록
⑤ Extend 확장 디렉터리 등록

클래스 라이브러리 자동 로딩 로딩 감지 순서는 다음과 같습니다.

① 클래스 라이브러리 매핑 정의 여부 ② PSR-4 자동 로딩 감지
③ PSR- 0 자동 로딩 감지;

보시다시피 클래스 라이브러리 매핑을 정의하는 방법이 가장 효율적입니다.

4. 오류 및 예외 메커니즘 등록

Error::register()를 실행하여 오류 및 예외 처리 메커니즘을 등록합니다.

은 세 부분으로 구성됩니다.

① 애플리케이션 종료 방법: thinkError::appShutdown<p></p>thinkError::appShutdown<br>오류 처리 방법: thinkError::appError ③ 예외 처리 방법: thinkError::appError<br>thinkError::appException애플리케이션 종료 방법을 등록하는 것은 일부 시스템 오류를 쉽게 차단하기 위한 것입니다.

전체 애플리케이션 요청 수명 주기 동안 예외나 심각한 오류가 발생하면 애플리케이션이 조기에 종료되고 예외 및

오류 메시지로 응답합니다.

5. 애플리케이션 초기화

애플리케이션을 실행하는 첫 번째 단계는 다음을 포함하여 애플리케이션을 초기화하는 것입니다.

애플리케이션 로드( public ) 구성; 별칭 정의 로드;
공개(함수) 파일 로드
extra_config_list로 정의됨 🎜 >extra_file_list로 정의된 확장 기능 파일 로드;
기본 시간대 설정
시스템 언어 팩 로드

6.
탐지

애플리케이션 초기화가 완료되면 PATH_INFO 탐지, URL 접미사 탐지를 포함한 URL 접근 탐지가 수행됩니다.

5.0 URL 액세스는 PATH_INFO 모드(호환 모드 포함)의 URL 주소여야 합니다. 예: serverName/index.php/index/index/hello/val/value

따라서 귀하의 환경이 일반 URL 매개변수 액세스만 지원할 수 있는 경우

serverName/index.php?s=/index/index/hello&val =value를 사용해야 합니다.

명령줄에서 항목 파일에 액세스하는 경우 계속하기 전에

을 통해 일반

매개변수를 얻을 수 있습니다.

7. 경로 감지 $php index.php index/index/hello/val/value...

url_route_on 매개변수가 활성화되면 URL 경로 감지가 먼저 수행됩니다. $_SERVER['PATH_INFO']

如果一旦检测到匹配的路由,根据定义的路由地址会注册到相应的URL调度。

5.0的路由地址支持如下方式:

路由到模块/控制器/操作;
路由到外部重定向地址;
路由到控制器方法;
路由到闭包函数;
路由到类的方法;

路由地址可能会受域名绑定的影响。

如果关闭路由或者路由检测无效则进行默认的模块/控制器/操作的分析识别。

如果在应用初始化的时候指定了应用调度方式,那么路由检测是可选的。

可以使用 \think\App::dispatch() 进行应用调度。

8、分发请求

在完成了URL检测和路由检测之后,路由器会分发请求到对应的路由地址,这也是应用请求的生命周期中最重要的一个环节。

在这一步骤中,完成应用的业务逻辑及数据返回。

建议统一使用return返回数据,而不是echo输出,如非必要,请不要执行exit中断。

直接echo输出的数据将无法进行自动转换响应输出的便利。

下面是系统支持的分发请求机制,可以根据情况选择:

模块/控制器/操作

这是默认的分发请求机制,系统会根据URL或者路由地址来判断当前请求的模块、控制器和操作名,并自动调用相应的访问控制器类,执行操作对应的方法。

该机制下面,首先会判断当前模块,并进行模块的初始化操作(和应用的初始化操作类似),模块的配置参数会覆盖应用的尚未生效的配置参数。

支持模块映射、URL参数绑定到方法,以及操作绑定到类等一些功能。

控制器方法

和前一种方式类似,只是无需判断模块、控制器和操作,直接分发请求到一个指定的控制器类的方法,因此没有进行模块的初始化操作。

外部重定向

可以直接分发请求到一个外部的重定向地址,支持指定重定向代码,默认为301重定向。

闭包函数

路由地址定义的时候可以直接采用闭包函数,完成一些相对简单的逻辑操作和输出。

类的方法

除了以上方式外,还支持分发请求到类的方法,包括:
静态方法: 

&#39;blog/:id&#39;=>&#39;\org\util\Blog::read&#39;

类的方法:

&#39;blog/:id&#39;=>&#39;\app\index\controller\Blog@read&#39;

9、响应输出

控制器的所有操作方法都是return返回而不是直接输出,系统会调用Response::send方法将最终的应用返回的数据输出到页面或者客户端,并自动转换成default_return_type参数配置的格式。所以,应用执行的数据输出只需要返回一个正常的PHP数据即可。

10、应用结束

事实上,在应用的数据响应输出之后,应用并没真正的结束,系统会在应用输出或者中断后进行日志保存写入操作。

系统的日志包括用户调试输出的和系统自动生成的日志,统一会在应用结束的时候进行写入操作。

而日志的写入操作受日志初始化的影响。

위 내용은 thinkPHP5.0 프레임워크 애플리케이션 구현의 요청 수명주기에 대한 자세한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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