출처 : http://www.yiiframework.com/doc/guide/1.1/en/basics.application
Application
- Application Configuration
- Application Base Directory
- Application Components
- Core Application Components
- Application Life Cycle
응용 프로그램은 요청이 처리되는 실행 컨텍스트를 캡슐화하는 개체입니다. 그 주된 임무는 요청에 대한 몇 가지 기본적인 정보를 수집하여 그 앞의 처리를 위해 적절한 컨트롤러에 요청을 전달하는 것입니다. 또한 응용 프로그램 수준의 초기 구성을 유지하는 중심적인 위치로 행동합니다. 이러한 이유로 응용 프로그램 개체는 프론트 컨트롤러 라고도합니다.
응용 프로그램은 항목 스크립트 에 의해, 싱글 톤으로 생성됩니다. 응용 프로그램 싱글턴은 어느 장소에서나 Yii::app() 로 액세스할 수 있습니다.
1. Application configuration
기본적으로 응용 프로그램 개체는 CWebApplication의 인스턴스입니다. 이것을 정의하기 위해 일반적으로 초기 구성 파일 (또는 배열)를 제공하여 인스턴스를 생성할 때 속성 값을 초기화합니다. 응용 프로그램을 사용자 정의하는 또 다른 방법은 CWebApplication을 확장하는 것입니다.
초기 구성은 "키 - 값"쌍의 배열입니다. 키는 응용 프로그램 인스턴스의 속성 이름을 나타냅니다. 값은 해당 속성의 초기 값입니다. 예를 들어, 다음 초기 구성 파일은 name 및 defaultController 속성을 구성합니다.
array( 'name'=>'Yii Framework', 'defaultController'=>'site', )
일반적으로 초기 구성은 독립적인 PHP 스크립트에 저장합니다 (예 : protected/config/main.php ). 이 스크립트에서 다음과 같이 구성의 배열을 반환합니다.
return array(...);
초기 구성을 적용하려면 응용 프로그램의 생성자에 초기 구성 파일 이름을 매개 변수로 전달합니다. 또는 보통 항목 스크립트에서 다음과 같이 Yii::createWebApplication()에 초기 구성 파일 이름을 매개 변수로 전달합니다.
$app=Yii::createWebApplication($configFile);
::tip:: 만약 응용 프로그램 초기 구성이 매우 복잡한 경우 여러 개의 파일로 분할할 수 있습니다. 각각의 파일은 구성 배열의 일부를 반환합니다. 그리고 메인의 초기 구성 파일에서 PHP의 include() 에 의해 다른 구성 파일을 포함 전체 구성 배열에 병합합니다.
2. Application Base Directory
응용 프로그램 기본 디렉터리는 보안상 주의를 요하는 모든 PHP 스크립트와 데이터 저장 위치의 루트 디렉토리입니다. 기본적으로 항목 스크립트를 포함하는 디렉토리 아래에 있는 protected라는 서브 디렉토리입니다. 이 위치는 응용 프로그램 초기 구성의 basePath 속성 값을 변경하여 사용자 정의 할 수 있습니다.
응용 프로그램 기본 디렉토리 아래의 내용은 웹 사용자가 액세스되지 않도록 보호해야합니다. Apache HTTP 웹서버를 사용하는 경우, .htaccess 파일을 기본 디렉토리 아래에 두는 것으로 쉽게 구현할 수 있습니다. .htaccess 파일의 내용은 다음과 같습니다.
deny from all
3. Application Components
응용 프로그램 개체의 기능은 유연한 구성 요소 아키텍처를 통해 쉽게 커스터마이즈 할 수 있습니다. 응용 프로그램은 여러가지의 응용 프로그램 구성 요소를 관리하고 각각 별도의 기능을 구현합니다.
예를 들어, 응용 프로그램은 사용자 요청에 대한 몇 가지 초기 작업을 수행하기 위해 CUrlManager 구성요소와 CHttpRequest 구성요소의 도움을 받습니다.
응용 프로그램 인스턴스의 components 속성을 구성하여 모든 응용 프로그램 구성요소를 사용하는 경우에도 클래스와 속성 값을 사용자 정의 할 수 있습니다.
예를 들어, 다음과 같이 여러 memcache 서버를 사용하도록 CMemCache 구성요소를 구성할 수 있습니다.
array( ...... 'components'=>array( ...... 'cache'=>array( 'class'=>'CMemCache', 'servers'=>array( array('host'=>'server1', 'port'=>11211, 'weight'=>60), array('host'=>'server2', 'port'=>11211, 'weight'=>40), ), ), ), )
위에서 components 배열에 cache 요소를 추가했습니다. 그리고 cache는 구성요소의 클래스가 CMemCache 이며, servers 속성 값들을 위와같이 설정합니다.
응용 프로그램 구성 요소에 액세스하려면 Yii::app()->ComponentID 로 사용할 수 있습니다. 여기서 ComponentID 구성 요소의 ID (예 Yii::app()->cache )를 참조하십시오.
응용 프로그램 구성 요소는 초기 구성 파일에서 enabled 속성을 FALSE로 설정하여 사용할 수 있습니다. 비활성화된 구성 요소에 액세스하면 null이 반환됩니다.
::tip:: 기본적으로 응용 프로그램 구성요소는 필요할때에만 생성됩니다. 결과적으로 응용 프로그램이 다량의 구성 요소를 가지도록 구성되어도 전체적으로 성능은 떨어지지 않습니다. 일부 응용 프로그램 구성요소 (예 CLogRouter )는 액세스되는지 여부에 관계없이 생성될 필요가 있을 것입니다. 이렇게 하기 위해서는 해당 ID를 preload 응용 프로그램 속성에 적으면 됩니다.
4. Core Application Components
Yii는 웹 애플리케이션에 공통으로 제공하는 핵심 응용 프로그램 구성요소를 미리 정의하고 있습니다.
예를 들어, request 구성요소는 사용자 요청에 대한 정보를 수집하고 요청된 URL 및 쿠키 정보를 제공하는데 사용됩니다. 이 같은 핵심 구성요소의 속성 값을 구성하여 Yii의 기본 동작에 대한 거의 모든 것을 변경할 수 있습니다.
다음은 CWebApplication 의해 미리 선언 된 핵심 구성 요소의 목록입니다.
- assetManager : CAssetManager - 개인 자산 파일의 발행을 관리합니다.
- authManager : CAuthManager - 역할 기반 액세스 제어 (RBAC)를 관리합니다.
- cache : CCache - 데이터 캐시 기능을 제공합니다. 주의 : 실제 클래스 (예 : CMemCache , CDbCache )을 지정하십시오. 그렇지 않으면이 구성 요소를 사용하는 경우 null을 반환합니다.
- clientScript : CClientScript - 클라이언트 스크립트 (javascript와 CSS)을 관리합니다.
- coreMessages : CPhpMessageSource - Yii 프레임워크에 사용되는 번역된 코어 메시지를 제공합니다.
- db : CDbConnection - 데이터베이스 연결을 제공합니다. 참고 :이 구성 요소를 사용하기 위해서는 connectionString 속성을 구성해야합니다.
- errorHandler : CErrorHandler - 캐치되지 않은 PHP 오류 및 예외를 처리합니다.
- format : CFormatter - 표시 목적을 위해 데이터값을 포맷합니다.
- messages : CPhpMessageSource - Yii 응용 프로그램에서 사용되는 번역된 메시지를 제공합니다.
- request : CHttpRequest - 사용자 요청에 관련된 정보를 제공합니다.
- securityManager : CSecurityManager - 보안 관련 서비스 (예 : 해싱 및 암호화)을 제공합니다.
- session : CHttpSession - 세션 관련 기능을 제공합니다.
- statePersister : CStatePersister - 글로벌 상태를 지속시키는 메커니즘을 제공합니다.
- urlManager : CUrlManager - URL 분석 및 생성 기능을 제공합니다.
- user : CWebUser - 현재 사용자의 신원과 관련된 정보를 보관합니다.
- themeManager : CThemeManager - 테마를 관리합니다.
5. Application Life Cycle
사용자 요청을 취급 할 때, 응용 프로그램은 다음 흐름으로 처리를하고 있습니다 :
- CApplication::preinit () 에 의해 응용 프로그램을 사전 초기화합니다;
- 클래스 자동 로더 및 오류 처리를 준비합니다;
- 핵심 응용 프로그램 구성 요소를 등록합니다;
- 응용 프로그램을 실행합니다;
- CApplication :: init () 에 의해 응용 프로그램을 초기화합니다;
- - 응용 프로그램 behaviors를 등록합니다;
- - 정적 응용 프로그램 구성 요소를 실행합니다;
- 이벤트 onBeginRequest 을 발행합니다;
- 사용자 요청을 처리합니다 :
- - 요청에 대한 정보를 수집합니다;
- - 컨트롤러를 생성합니다;
- - 컨트롤러를 실행합니다;
- 이벤트 onEndRequest 을 발행합니다;