백엔드 개발 PHP 튜토리얼 thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클 분석

thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클 분석

May 07, 2018 am 09:54 AM
php thinkphp5.0

이 글은 thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클을 주로 소개하고, thinkPHP5.0 프레임워크 애플리케이션 요청 라이프사이클과 관련된 다양한 실행 프로세스를 자세히 분석합니다. . 0 프레임워크 애플리케이션 요청 수명 주기. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

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

1. 항목 파일

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

보통 엔트리 파일의 코드는 비교적 간단합니다. 일반적인 엔트리 파일 코드는 다음과 같습니다.

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

일반 엔트리 파일에서는 주로 일부 상수를 정의했으며, 지원되는 상수는 다음 내용이나 부록을 참조하세요. .

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

2. 부팅 파일

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

① 시스템 상수 정의 로드

② 환경 변수 정의 파일 로드 ③ 자동 로딩 메커니즘 등록
4 오류 및 예외 처리 메커니즘 등록; 기존 구성 파일 ;
⑥ 애플리케이션 실행;


애플리케이션 항목 파일에서 기본 부팅 파일이 변경되면 위의 실행 프로세스가 이에 따라 변경될 수 있습니다.

3. 자동 로딩 등록

시스템은 Loader::register() 메서드를 호출하여 자동 로딩을 등록합니다. 이 단계가 완료되면 사양을 준수하는 모든 클래스 라이브러리(타사 클래스 포함) Composer가 로딩에 의존하는 라이브러리)는 자동으로 로드됩니다.

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

① 시스템의 자동 로딩 방법 등록 thinkLoader::autoload

② 시스템 네임스페이스 정의 등록

③ 클래스 라이브러리 매핑 파일 로드(존재하는 경우) ④ 존재하는 경우 Composer 설치 후 자동 로딩을 위해 Composer 등록
⑤ 확장 확장 디렉토리 등록


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

① 클래스 라이브러리 매핑 정의 여부

② PSR-4 자동 로딩 감지; ;

3 PSR-0 자동 로딩 로딩 감지

클래스 라이브러리 매핑을 정의하는 방법이 가장 효율적이라는 것을 알 수 있습니다.

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

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

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

① 애플리케이션 종료 방법: thinkError::appShutdown<p> ② 오류 처리 방법: thinkError::appError</p> ③ 예외 처리 방법: thinkError::appException

thinkError::appShutdown<br/>② 错误处理方法:thinkError::appError<br/>③ 异常处理方法:thinkError::appException

注册应用关闭方法是为了便于拦截一些系统错误。

在整个应用请求的生命周期过程中,如果抛出了异常或者严重错误,均会导致应用提前结束,并响应输出异常和错误信息。

5、应用初始化

执行应用的第一步操作就是对应用进行初始化,包括:

加载应用(公共)配置;
加载应用状态配置;
加载别名定义;
加载行为定义;
加载公共(函数)文件;
加载扩展配置文件(由extra_config_list定义);
加载扩展函数文件(由extra_file_list定义);
设置默认时区;
加载系统语言包;

6、URL访问检测

应用初始化完成后,就会进行URL的访问检测,包括PATH_INFO检测和URL后缀检测。

5.0的URL访问必须是PATH_INFO方式(包括兼容方式)的URL地址,例如:

http://serverName/index.php/index/index/hello/val/value

所以,如果你的环境只能支持普通方式的URL参数访问,那么必须使用

http://serverName/index.php?s=/index/index/hello&val=value

如果是命令行下面访问入口文件的话,则通过

$php index.php index/index/hello/val/value...

获取到正常的$_SERVER[&#39;PATH_INFO&#39;]애플리케이션 종료 방법을 등록하는 것은 일부 시스템 오류를 쉽게 차단하기 위한 것입니다.

전체 애플리케이션 요청 수명 주기 동안 예외 또는 심각한 오류가 발생하면 애플리케이션이 조기 종료되고 그에 대한 응답으로 예외 및 오류 정보가 출력됩니다.

5. 애플리케이션 초기화

다음을 포함하여 애플리케이션을 초기화합니다.

애플리케이션 상태 구성 로드

로드 동작 정의; ;

공용(함수) 파일 로드;

확장 구성 파일 로드(extra_config_list로 정의);확장 함수 파일 로드(extra_file_list로 정의);
기본 시간대 설정;
시스템 언어 팩 로드;

6. URL 액세스 감지

애플리케이션 초기화가 완료되면 PATH_INFO 감지 및 URL 접미사 감지를 포함한 URL 액세스 감지가 수행됩니다.

🎜5.0 URL 액세스는 PATH_INFO 모드(호환 모드 포함)의 URL 주소여야 합니다. 예: 🎜🎜http://serverName/index.php/index/index/hello / val/value🎜🎜🎜따라서 귀하의 환경이 일반 URL 매개변수 액세스만 지원할 수 있는 경우 🎜🎜http://serverName/index.php?s= /index를 사용해야 합니다. /index/hello&val=value🎜🎜🎜명령줄에서 항목 파일에 액세스하는 경우 🎜🎜$php index.php index/index/hello/val/value...🎜 🎜Only를 사용하세요. 일반 $_SERVER['PATH_INFO'] 매개변수를 얻은 후 계속하세요. 🎜🎜🎜7. 경로 감지🎜🎜🎜url_route_on 매개변수가 활성화되면 URL 경로 감지가 먼저 수행됩니다. 🎜🎜일치하는 경로가 감지되면 정의된 경로 주소에 따라 해당 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、应用结束

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

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

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

相关推荐:

ThinkPHP框架中使用Memcached缓存数据的方法

thinkphp框架里用linux的crontab写php的定时脚本

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

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

CakePHP 로깅 CakePHP 로깅 Sep 10, 2024 pm 05:26 PM

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

See all articles