PHP CodeIgniter 프레임 워 크 의 작업 원리 연구
8766 단어 PHPCodeIgniter프레임작업 원리
CI 는 사용 하기 쉽 고 웹 애플 리 케 이 션 을 편리 하 게 개발 할 수 있 습 니 다.CI 의 작업 흐름 도 를 살 펴 보 겠 습 니 다.
、
1.index.php 는 전단 컨트롤 러 로 서 CodeIgniter 를 실행 하 는 데 필요 한 기본 자원 을 초기 화 합 니 다.
2.Router 는 누가 요청 을 처리 할 지 확인 하기 위해 HTTP 요청 을 검사 합 니 다.
3.캐 시(Cache)파일 이 존재 하면 일반적인 시스템 실행 순 서 를 돌아 브 라 우 저 에 직접 보 냅 니 다.
4.보안(Security).응용 프로그램 컨트롤 러(Application Controller)가 불 러 오기 전에 HTTP 요청 과 사용자 가 제출 한 데 이 터 를 걸 러 냅 니 다.
5.컨트롤 러(Controller)는 모델,핵심 라 이브 러 리,보조 함수,그리고 특정한 요청 을 처리 하 는 데 필요 한 다른 자원 을 불 러 옵 니 다.
6.최종 보기(View)가 웹 브 라 우 저 에 보 낸 내용 을 렌 더 링 합 니 다.캐 시(Caching)를 열 면 보기 가 먼저 캐 시 되 기 때문에 다음 요청 에 사용 할 수 있 습 니 다.
이상 은 대체적인 절 차 를 제시 했다.브 라 우 저 에 페이지 가 나타 나 는 것 을 보 았 을 때 프로그램 내 부 는 어떻게 작 동 합 니까?
다음은 실행 순서에 따라 CI 프레임 워 크 에 주로 불 러 오 는 파일 을 순서대로 열거 하고 그 역할 을 간략하게 소개 합 니 다.
01. index.php
사용 환경 정의(ENVIRONMENT),프레임 경로(systempath,BASEPATH),응용 디 렉 터 리(applicationfolder),응용 경로(APPPATH)등,CI 핵심 파일 불 러 오기(require)
02.BASEPATH/core/codeIgniter.php(ps.실제 BASEPATH 는 마지막 파일 구분자'/'를 포함 하고 있 습 니 다.여기에'/'를 추가 로 추가 한 것 은 더 선명 하 게 보 여주 기 위해 서 입 니 다)
시스템 초기 화 파일,전체 프레임 워 크 의 가장 핵심 적 인 부분,여기에 일련의 base class 를 불 러 오고 이 요청 을 실행 합 니 다.
03. BASEPATH/core/Common.php
common 파일 은 일련의 기초 와 공공 함 수 를 포함 하여 전역 적 으로 사용 할 수 있 습 니 다.예 를 들 어 loadclass(),get_config()등
04. BASEPATH/core/Benchmark
이것 은 기본 테스트 클래스 로 각 단계 의 실행 점 을 기본적으로 표시 하여 실행 시간 을 얻 습 니 다.모니터링 지점 도 스스로 정의 할 수 있 습 니 다.
05. BASEPATH/core/Hooks.php
CI_Hooks 는 갈고리 류 로 프레임 워 크 를 확장 하 는 핵심 입 니 다.프로그램 이 허용 하 는 각 단계 에 연결 점 을 삽입 하고 사용자 정의 클래스,함수 등 을 실행 할 수 있 습 니 다.
06. BASEPATH/core/Config.php
파일 관리 클래스 설정,읽 기 또는 설정 불 러 오기
07. BASEPATH/core/URI.php, BASEPATH/core/Router.php
URI 클래스 는 요청 한 uri 를 분석 하고 uri 를 분할 하 는 함수 집합 을 제공 합 니 다.Router 클래스 에서 사용 할 수 있 습 니 다.
08. BASEPATH/core/Router.php
루트 클래스,즉 요청 한 uri 와 사용자 가 설정 한 루트(APPPATH/config/routes.php)를 통 해 사용자 요청 을 지정 한 처리 함수 에 배포 합 니 다.
09. BASEPATH/core/Output.php, BASEPATH/core/Input.php
입력 클래스,즉 요청 한 입력 파 라 메 터 를 처리 하여 안전 한 가 져 오 는 방식 을 제공 합 니 다.출력 클래스 는 마지막 실행 결 과 를 보 내 고 캐 시 기능 도 담당 합 니 다.
10. BASEPATH/core/Controller.php
컨트롤 러 기본 클래스 는 단일 모드 로 인 스 턴 스 를 제공 하고 전체 응용 프로그램의 심장 을 제공 합 니 다.이것 은 Super Object 입 니 다.응용 프로그램 에 불 러 온 클래스 는 컨트롤 러 의 구성원 변수 가 될 수 있 습 니 다.이 점 은 매우 중요 합 니 다.나중에 계속 할 것 입 니 다. 언급 하 다.
11. APPPATH/controllers/$RTR->fetch_directory().$RTR->fetch_class().'.php'
경로 기능 을 통 해 컨트롤 러 이름 을 얻 고 실제 컨트롤 러 클래스(하위 클래스)를 예화 합 니 다.
12. BASEPATH/core/Loader.php
CI_Loader 는 응용 프로그램의 각종 라 이브 러 리,모델,보기,데이터베이스,파일 등 을 불 러 오고 컨트롤 러 의 구성원 변 수 를 설정 합 니 다.
13. call_user_func_array 호출 처리 함수
루트 를 통 해 action 함수 이름 을 얻 고 컨트롤 러->action()함 수 를 호출 하 며 응용 논 리 를 처리 합 니 다.실제 업무 처리 논 리 는 action 함수 에 적 힌 것 입 니 다.
14. $OUT->_display()내용 출력
이상 은 전체 응용 프로그램의 가장 기본 적 인 처리 절차 입 니 다.다음은 핵심 내용 코드 를 선택 하여 설명 함으로써 CI 에 대한 이 해 를 강화 합 니 다.
<?php
//*BASEPATH/system/core/Common.php
// Benchmark,Hooks,Config
function &load_class($class, $directory = 'libraries', $prefix = 'CI_')
{
//
static $_classes = array();
// ,
if (isset($_classes[$class]))
{
return $_classes[$class];
}
$name = FALSE;
//
foreach (array(APPPATH, BASEPATH) as $path)
{
if (file_exists($path.$directory.'/'.$class.'.php'))
{
$name = $prefix.$class;
if (class_exists($name) === FALSE)
{
require($path.$directory.'/'.$class.'.php');
}
break;
}
}
//
if ($name === FALSE)
{
exit('Unable to locate the specified class: '.$class.'.php');
}
// ,is_loaded()
is_loaded($class);
$_classes[$class] = new $name();
return $_classes[$class];
}
// 。
function &is_loaded($class = '')
{
static $_is_loaded = array();
if ($class != '')
{
$_is_loaded[strtolower($class)] = $class;
}
return $_is_loaded;
}
//*BASEPATH/system/core/Controller.php
class CI_Controller {
private static $instance;
public function __construct()
{
self::$instance =& $this;
// (CodeIgniter.php) ( 4,5,6,7,8,9 ),
// , (super object)
foreach (is_loaded() as $var => $class)
{
$this->$var =& load_class($class);
}
<span style="white-space:pre"> </span>// Loader , Loader <span style="white-space:pre"> </span>
$this->load =& load_class('Loader', 'core');
$this->load->initialize();
log_message('debug', "Controller Class Initialized");
}
//
public static function &get_instance()
{
return self::$instance;
}
}
//*BASEPATH/system/core/CodeIgniter.php
// Load the base controller class
require BASEPATH.'core/Controller.php';
// , ,
// ,
function &get_instance()
{
return CI_Controller::get_instance();
}
//
// :Router router->_validate_request()
if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php'))
{
show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.');
}
include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().'.php');
$class = $RTR->fetch_class(); //Controller class name
$method = $RTR->fetch_method(); //action name
//.....
//
// uri class/function
call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2));
//
if ($EXT->_call_hook('display_override') === FALSE)
{
$OUT->_display();
}
//*BASEPATH/system/core/Loader.php
// Loader model 。
public function model($model, $name = '', $db_conn = FALSE)
{
$CI =& get_instance();
if (isset($CI->$name))
{
show_error('The model name you are loading is the name of a resource that is already being used: '.$name);
}
$model = strtolower($model);
// model path ,
foreach ($this->_ci_model_paths as $mod_path)
{
if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
{
continue;
}
if ($db_conn !== FALSE AND ! class_exists('CI_DB'))
{
if ($db_conn === TRUE)
{
$db_conn = '';
}
$CI->load->database($db_conn, FALSE, TRUE);
}
if ( ! class_exists('CI_Model'))
{
load_class('Model', 'core');
}
require_once($mod_path.'models/'.$path.$model.'.php');
$model = ucfirst($model);
// model 。Loader
$CI->$name = new $model();
$this->_ci_models[] = $name;
return;
}
// couldn't find the model
show_error('Unable to locate the model you have specified: '.$model);
}
//*BASEPATH/system/core/Model.php
//__get() ,
// Model __get() , Model , ( $this->var )
function __get($key)
{
$CI =& get_instance();
return $CI->$key;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.