thinkPHP5.0 프레임 적용 요청 라이프 사이클 분석
이 내용은 ThinkPHP에 대한 내용입니다.0의 응용 요청의 생명주기는 개발자가 전체 실행 절차를 이해할 수 있도록 대체적으로 소개한다.
1. 포털 파일
사용자가 요청한 요청은 보통 공공/index입니다.php 파일.물론, 당신도 새로운 입구 파일을 변경하거나 추가할 수 있습니다.
일반적으로 포털 파일의 코드는 다음과 같이 간단합니다.
//
//
define('APP_PATH', __DIR__ . '/../application/');
//
require __DIR__ . '/../thinkphp/start.php';
일반 입구 파일은 상수를 위주로 정의했으니 지원하는 상수는 후속 내용이나 부록 부분을 참고하십시오.
일반적으로, 우리는 응용 입구 파일에 지나치게 많은 코드, 특히 업무 논리와 관련된 코드를 넣는 것을 권장하지 않는다.
2. 부트 파일
다음은 실행 프레임워크의 안내 파일, start.php 파일은 시스템의 기본 안내 파일입니다.부트 파일에서 다음 작업이 수행됩니다.
① 로드 시스템 상수 정의;② 환경 변수 정의 파일을 로드합니다.③ 자동 로드 메커니즘을 등록한다.④ 등록 오류와 비정상 처리 메커니즘;⑤ 일반 프로파일을 로드합니다.⑥ 적용 수행;
만약 응용 프로그램 입구 파일에서 기본 안내 파일을 바꾸면, 상술한 실행 절차가 따라서 바뀔 수 있습니다.
3. 등록 자동 로드
시스템은 Loader::register () 방법을 호출하여 자동으로 불러옵니다. 이 단계가 완성되면 규범에 부합되는 모든 클래스 라이브러리 (Composer가 불러오는 제3자 클래스 라이브러리 포함) 가 자동으로 불러옵니다.
시스템의 자동 로드는 다음 두 부분으로 구성됩니다.
① 등록 시스템의 자동 로드 방법\think\Loader::autoload ② 등록 시스템의 네임스페이스 정의 ③ 클래스 라이브러리 맵 파일 로드(있을 경우) ④ Composer 설치가 있을 경우 등록 Composer 자동 로드 ⑤ 등록 Extend 확장 디렉터리
라이브러리 자동 로드 체크 순서는 다음과 같습니다.
① 라이브러리 맵을 정의할 지 여부;② PSR-4 자동 로드 감지③ PSR-0 자동 로드 감지
클래스 라이브러리의 맵을 정의하는 방식이 가장 효율적임을 알 수 있다.
4. 등록 오류와 이상 메커니즘
Error::register() 등록 오류 및 예외 처리 메커니즘을 실행합니다.
세 부분으로 구성됩니다.
① 적용 닫기 방법:
think\Error::appShutdown
② 오류 처리 방법: think\Error::appError
③ 이상 처리 방법: think\Error::appException
등록 응용 프로그램을 닫는 방법은 일부 시스템 오류를 쉽게 차단하기 위해서이다.전체 응용 프로그램 요청의 생명주기 과정에서 이상이나 심각한 오류가 발생하면 응용이 앞당겨 종료되고 출력 이상과 오류 정보에 응답할 수 있다.
5. 응용 초기화
애플리케이션의 첫 번째 단계는 다음과 같은 애플리케이션을 초기화하는 것입니다.
응용 프로그램(공용) 설정 불러오기;응용 상태 설정 불러오기;별명 정의 불러오기;로드 행위 정의;공용(함수) 파일 로드하기;확장 구성 파일을 로드합니다(extra config list로 정의).확장 함수 파일을 로드합니다(extra file list로 정의).기본 시간대 설정하기;시스템 언어 패키지 불러오기;
6. URL 액세스 체크
적용 초기화가 완료되면 PATH 를 포함한 URL 액세스 테스트가 수행됩니다.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['PATH_INFO']
매개 변수를 가져와야만 계속할 수 있습니다.7. 라우팅 테스트
url 이 열리면route_on 매개 변수는 먼저 URL에 대한 라우팅 체크를 수행합니다.
일치하는 라우트가 발견되면 정의된 라우팅 주소에 따라 해당 URL 스케줄링에 등록됩니다.
5.0 라우팅 주소는 다음과 같이 지원됩니다.
모듈/컨트롤러/조작으로 라우팅하기;외부로 경로를 다시 지정합니다.컨트롤러로 가는 방법;패키지 함수로 루트하기;클래스로 가는 방법;
라우팅 주소는 도메인 이름 바인딩의 영향을 받을 수 있습니다.
루트를 닫거나 루트 검출이 잘못되면 기본 모듈/컨트롤러/조작 분석 식별을 합니다.
만약 응용 프로그램을 초기화할 때 응용 스케줄링 방식을 지정한다면, 루트 검사는 선택할 수 있습니다.
\think\App::dispatch()
로 응용 스케줄링을 할 수 있습니다.8. 배포 요청
URL 체크와 라우팅 체크가 완료되면 라우터는 해당 라우팅 주소로 요청을 전송합니다. 이것은 응용 요청의 라이프 사이클에서 가장 중요한 부분입니다.
이 단계에서 응용된 업무 논리와 데이터 반환을 완성한다.
echo 출력이 아닌return을 사용하여 데이터를 되돌려 주는 것을 권장합니다. 필요하지 않으면 exit를 실행하지 마십시오.
echo에서 직접 출력한 데이터는 응답 출력을 자동으로 변환할 수 없습니다.
다음은 상황에 따라 선택할 수 있는 시스템이 지원하는 배포 요청 메커니즘입니다.
모듈/컨트롤러/운영
이것은 기본적인 배달 요청 메커니즘으로 시스템은 URL이나 루트 주소에 따라 현재 요청한 모듈, 컨트롤러와 조작 이름을 판단하고 해당하는 접근 컨트롤러 종류를 자동으로 호출하여 조작에 대응하는 방법을 실행한다.
이 메커니즘 아래에서 먼저 현재 모듈을 판단하고 모듈의 초기화 작업(응용의 초기화 작업과 유사)을 진행하며 모듈의 설정 파라미터는 응용된 아직 효력이 발생하지 않은 설정 파라미터를 덮어씁니다.
모듈 매핑, URL 매개 변수 바인딩 방법, 작업 바인딩 클래스 등 일부 기능을 지원합니다.
컨트롤러 방법
이전 방식과 유사하지만 모듈, 컨트롤러와 조작을 판단하지 않고 지정한 컨트롤러 종류로 요청을 직접 나누어 주는 방법이 없기 때문에 모듈의 초기화 작업은 진행되지 않았다.
외부 리디렉션
외부의 리셋 주소로 직접 배달할 수 있으며, 리셋 코드를 지정할 수 있으며, 기본값은 301입니다.
패킷 함수
루트 주소를 정의할 때 클립 함수를 직접 사용하여 상대적으로 간단한 논리 조작과 출력을 완성할 수 있다.
종류적 방법
이러한 방법 외에도 정적 방법을 포함하여 요청을 클래스에 나누어 주는 방법도 지원한다.
'blog/:id'=>'\org\util\Blog::read'
클래스 방법:
'blog/:id'=>'\app\index\controller\Blog@read'
9. 응답 출력
컨트롤러의 모든 조작 방법은return이 직접 출력이 아니라 리턴으로 되돌아옵니다. 시스템은
Response::send
방법으로 최종 응용 프로그램이 되돌아오는 데이터를 페이지나 클라이언트에 출력하고 default_return_type
매개 변수 설정 형식으로 자동으로 변환합니다.따라서 응용이 실행한 데이터 출력은 정상적인 PHP 데이터만 되돌려주면 된다.10. 응용 종료
사실상 응용된 데이터가 출력에 응답한 후에 응용이 진정으로 끝나지 않고 시스템은 응용된 출력이나 중단된 후에 로그 저장 쓰기 작업을 한다.
시스템의 로그는 사용자가 출력을 디버깅하고 시스템이 자동으로 생성하는 로그를 포함하며, 통일은 응용이 끝날 때 쓰기 작업을 한다.
로그 쓰기는 로그 초기화의 영향을 받는다.
더 많은 thinkPHP 관련 내용에 관심이 있는 독자들은 본 사이트의 주제인,,,,,,,,,,,,,,,,,,,,,, 그리고 PHP 템플릿 기술 총결을 보실 수 있습니다.
본 논문은 ThinkPHP 프레임워크를 바탕으로 하는 PHP 프로그램 설계에 도움이 되었으면 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.