>  기사  >  php教程  >  Yii로 빠른 시작(2)

Yii로 빠른 시작(2)

黄舟
黄舟원래의
2016-12-20 11:08:401037검색

3. Controller(Controller)
Controller는 CController 클래스의 하위 클래스 인스턴스입니다. 사용자가 요청할 때 애플리케이션에 의해 생성됩니다. 컨트롤러가 실행되면 일반적으로 필요한 모델을 도입하고 해당 뷰를 렌더링하는 요청된 작업(컨트롤러 클래스 메서드)을 수행합니다. 액션은 이름이 액션(액션 + 대문자로 된 액션 이름)으로 시작하는 컨트롤러 클래스 메서드입니다.
컨트롤러 클래스 파일은 protected/controllers/
컨트롤러와 액션은 ID로 식별됩니다.
컨트롤러 ID는 '상위 디렉토리/하위 ​​디렉토리/컨트롤러 이름' 형식으로, 해당 컨트롤러 클래스 파일 protected/controllers/상위 디렉토리/하위 ​​디렉토리/컨트롤러 이름(대문자 Controller.php)에 해당합니다.
작업 ID는 작업 접두사가 없는 작업 메서드 이름입니다.
1. 라우팅
사용자는 라우팅 형태로 특정 컨트롤러와 작업을 요청합니다. 경로는 슬래시로 구분된 컨트롤러 ID와 작업 ID로 연결됩니다.
예를 들어 post/edit 경로는 PostController와 해당 편집을 나타냅니다

액션. 기본적으로 URL http://hostname/index.php?r=post/edit는 이 컨트롤러와 작업을 요청합니다.
참고: 기본적으로 경로는 대소문자를 구분합니다. 응용 프로그램 구성에서 CUrlManager::caseSensitive를 false로 설정하여 라우팅에서 대/소문자를 구분하지 않도록 할 수 있습니다. 대소문자를 구분하지 않는 모드에서는 컨트롤러 클래스 파일이 포함된 디렉터리 이름이 소문자이고 컨트롤러 맵과 작업 맵에 사용되는 키가 소문자라는 규칙을 따라야 합니다.
라우팅 형식: 컨트롤러 ID/작업 ID 또는 모듈 ID/컨트롤러 ID/작업 ID(중첩 모듈인 경우 모듈 ID는 상위 모듈 ID/하위 모듈 ID입니다)
2. 컨트롤러 인스턴스화
애플리케이션은 다음 규칙을 사용하여 컨트롤러 클래스와 클래스 파일의 위치를 ​​결정합니다.
1. CWebApplication::catchAllRequest가 지정된 경우 컨트롤러는 이 속성과 사용자가 지정한 컨트롤러 ID를 기반으로 생성됩니다. 무시됩니다. 이는 일반적으로 애플리케이션을 유지 관리 상태로 전환하고 정적 프롬프트 페이지를 표시하는 데 사용됩니다.
2. CWebApplication::controllerMap에서 ID를 찾으면 해당 컨트롤러 구성을 사용하여 컨트롤러 인스턴스를 생성합니다.
3. ID가 'path/to/xyz' 형식인 경우 컨트롤러 클래스 이름은 XyzController로 판단되며 해당 클래스 파일은 protected/controllers/path/to/XyzController입니다. .php. 클래스 파일이 없으면 404CHttpException이 트리거됩니다.
모듈의 경우 애플리케이션은 이 ID가 모듈의 컨트롤러를 나타내는지 확인합니다. 그렇다면 모듈 인스턴스가 먼저 생성되고 모듈 내의 컨트롤러 인스턴스가 생성됩니다.
3. 액션
액션은 액션이라는 단어를 접두사로 하여 명명된 메서드로 정의됩니다. 더 발전된 방법은 액션 클래스를 정의하고 컨트롤러가 요청을 받을 때 이를 인스턴스화하도록 하는 것입니다. 이를 통해 작업을 재사용할 수 있어 재사용성이 향상됩니다.
1. 액션 클래스를 정의합니다.
class UpdateAction은 CAction을 확장합니다
{
publicfunction run()
{
// 여기에 액션 로직을 배치합니다. 🎜>}
}
2. 액션 클래스 사용: 컨트롤러가 이 액션을 알 수 있도록 하려면 다음과 같은 방법으로 컨트롤러 클래스의 actions() 메서드를 재정의해야 합니다.
class PostController extends CController
{
publicfunction actions()
{
return array(
'edit'=>'application.controllers.post.UpdateAction',//"application 폴더/controllers/ 사용) post/UpdateAction.php "편집 작업을 처리하는 파일의 클래스
);
}
}
위에 표시된 대로 경로 별칭 "application.controllers.post.UpdateAction"을 사용하여 액션 클래스 파일을 "protected" /controllers/post/UpdateAction.php"로 지정합니다.
클래스 기반 액션을 작성하면 애플리케이션을 모듈 스타일로 구성할 수 있습니다. 예를 들어, 다음 디렉토리 구조를 사용하여 컨트롤러 관련 코드를 구성할 수 있습니다:
protected/
controllers/
PostController.php
UserController.php
post/
CreateAction.php
ReadAction.php
UpdateAction.php
user/
CreateAction.php
ListAction.php
ProfileAction.php
UpdateAction.php
4.
필터는 컨트롤러 작업 전후에 실행되도록 구성할 수 있는 코드 조각입니다.
작업 하나에 여러 개의 필터가 있을 수 있습니다. 필터가 여러 개인 경우 필터 목록에 표시된 순서대로 실행됩니다. 필터는 작업 및 기타 후속 필터가 실행되는 것을 방지할 수 있습니다.
필터는 컨트롤러 클래스의 메서드로 정의될 수 있습니다. 필터 메소드 이름은 filter로 시작해야 합니다. 예를 들어 기존 filterAccessControl 메서드는 accessControl이라는 필터를 정의합니다. 필터 메소드는 다음 구조를 가져야 합니다:
공용 함수 filterAccessControl($filterChain)
{
// $filterChain->run()을 호출하여 후속 필터 및 작업 실행을 계속합니다.
}
$filterChain(필터 체인)은 요청된 작업과 관련된 필터 목록을 나타내는 CFilterChain의 인스턴스입니다. 필터 메소드 내에서 $filterChain->run()을 호출하여 후속 필터와 작업을 계속 실행할 수 있습니다.
액션과 마찬가지로 필터도 객체일 수 있습니다. 객체는 CFilter의 인스턴스이거나 해당 하위 클래스 중 하나입니다. 다음 코드는 새 필터 클래스를 정의합니다.
class PerformanceFilter extends CFilter
{
protected function preFilter($filterChain)
{
// 작업이 실행되기 전에 적용되는 논리
return true; // 액션을 실행하지 말아야 할 경우 false를 여기서 반환
}

protectedfunction postFilter($filterChain)
{
// 액션 실행 후 로직 적용
}
}

액션에 필터를 적용하려면 CController::filters() 메서드를 재정의해야 합니다. 이 메소드는 필터 구성 배열을 반환해야 합니다. 예:
class PostController는 CController를 확장합니다
{
......
publicfunctionfilters()
{
return array(
'postOnly + edit, create' , //액션을 편집하고 생성하기 위해 postOnly 필터를 적용합니다. (메소드 기반 필터입니다.)
array( //필터를 구성하는 데 배열이 사용됩니다
'application.filters.PerformanceFilter - 편집, 생성',//편집 및 생성을 제외한 모든 작업에 application.filters.PerformanceFilter 필터 적용(객체 기반 필터)
'unit'=> ;'second' , //필터 객체의 단위 속성 값을 초로 초기화
),
);
}
}
위 코드는 postOnly와 PerformanceFilter라는 두 가지 필터를 지정합니다. postOnly 필터는 메소드 기반입니다(해당 필터 메소드는 CController에 정의되어 있음).performanceFilter 필터는 객체 기반입니다. 경로 별칭 application.filters.PerformanceFilter는 필터 클래스 파일이 protected/filters/PerformanceFilter임을 지정합니다. 필터 개체의 속성 값을 초기화하는 데 사용할 수 있도록 배열을 사용하여 PerformanceFilter를 구성합니다. 여기서 PerformanceFilter의 단위 속성 값은 초로 초기화됩니다.

더하기 및 빼기 기호를 사용하여 필터를 적용해야 하거나 적용하지 말아야 하는 작업을 지정할 수 있습니다. 위 코드에서 postOnly는 edit, create 액션에만 적용되어야 하고, PerformanceFilter는 edit, create 액션이 아닌 액션에만 적용되어야 합니다. 필터 구성에 더하기 또는 빼기 기호가 사용되지 않으면 이 필터가 모든 작업에 적용됩니다.

5. 모델(Model)
모델은 CModel 또는 그 하위 클래스의 인스턴스입니다. 모델은 데이터 및 이와 관련된 비즈니스 논리를 보유하는 데 사용됩니다.
모델은 별도의 데이터 개체입니다. 데이터 테이블의 행일 수도 있고 사용자가 입력한 양식일 수도 있습니다.
데이터 객체의 각 필드는 모델의 속성에 해당합니다. 각 속성에는 라벨이 있으며 일련의 규칙으로 확인할 수 있습니다.
Yii는 폼 모델과 액티브 레코드라는 두 가지 모델을 구현합니다. 둘 다 동일한 기본 클래스 CModel에서 상속됩니다.
양식 모델은 CFormModel의 인스턴스입니다. 양식 모델은 사용자 입력에서 얻은 데이터를 보유하는 데 사용됩니다. 이 데이터는 종종 획득, 사용 및 폐기됩니다. 예를 들어 로그인 페이지에서 양식 모델을 사용하여 최종 사용자가 제공한 사용자 이름과 비밀번호 정보를 나타낼 수 있습니다.
AR(Active Record)은 객체 지향 스타일로 데이터베이스 액세스를 추상화하기 위한 디자인 패턴입니다. 각 AR 개체는 CActiveRecord의 인스턴스 또는 해당 하위 클래스 중 하나입니다. 데이터 테이블의 행을 나타냅니다. 행의 필드는 AR 개체의 속성에 해당합니다.

6. 뷰
뷰는 주요 사용자 상호 작용 요소를 포함하는 PHP 스크립트입니다.
뷰에는 렌더링 시 이름이 뷰 스크립트 파일을 식별하는 데 사용됩니다. . 보기 이름은 보기 스크립트 이름과 동일합니다. 예를 들어, 뷰 편집의 이름은 edit.php라는 스크립트 파일에서 나옵니다. 렌더링하려면 뷰 이름을 전달하여 CController::render()를 호출하세요. 이 방법은 "protected/views/controller ID" 디렉터리에서 해당 보기 파일을 검색합니다.
뷰 스크립트 내에서 $this를 통해 컨트롤러 인스턴스에 액세스할 수 있습니다. "$this->property name"을 사용하여 뷰에서 컨트롤러의 모든 속성을 가져올 수 있습니다.
다음 푸시 메소드를 사용하여 뷰에 데이터를 전달할 수도 있습니다.
$this->render('edit', array(
'var1'=>$value1,
' var2 '=>$value2,
));
위 메소드에서 render() 메소드는 배열의 두 번째 매개변수를 변수로 추출합니다. 그 결과 뷰 스크립트에서 $var1 및 $var2 변수에 직접 액세스할 수 있습니다.
1. 레이아웃
레이아웃은 뷰를 수정하는 데 사용되는 특수 뷰 파일입니다. 일반적으로 사용자 인터페이스 보기의 공통 부분이 포함됩니다. 예를 들어 레이아웃은 머리글과 바닥글 부분을 포함할 수 있으며 그 사이에 콘텐츠를 포함할 수 있습니다.

......머리글은 여기......

......바닥글은 여기..... .

$content는 콘텐츠 보기의 렌더링 결과를 저장합니다.
render()를 사용하면 레이아웃이 암시적으로 적용됩니다. 보기 스크립트 protected/views/layouts/main.php가 기본 레이아웃 파일입니다. 이는 CWebApplication::layout을 변경하여 사용자 정의할 수 있습니다. 레이아웃 없이 뷰를 렌더링하려면 renderPartial()을 호출하세요.
2. 작은 개체
작은 개체는 CWidget 또는 그 하위 클래스의 인스턴스입니다. 데이터를 표현하는데 주로 사용되는 컴포넌트입니다. 위젯은 복잡하고 독립적인 사용자 인터페이스를 생성하기 위해 뷰에 포함되는 경우가 많습니다. 예를 들어 달력 위젯을 사용하여 복잡한 달력 인터페이스를 렌더링할 수 있습니다. Gizmos는 사용자 인터페이스를 더욱 재사용 가능하게 만듭니다.
다음 뷰 스크립트에 따라 위젯을 사용할 수 있습니다:
beginWidget('위젯 클래스의 경로 별칭'[,'속성 초기화 값을 포함하는 배열']) ? >
...위젯에서 얻을 수 있는 콘텐츠 본문...
endWidget();?>
또는
widget('위젯 클래스의 경로 별칭'[,'속성 초기화 값을 포함하는 배열']);?>
후자는 본문 내용이 필요하지 않은 구성 요소에 사용됩니다.
위젯은 성능을 맞춤설정하도록 구성할 수 있습니다. 이는 CBaseController::beginWidget 또는 CBaseController::widget을 호출하여 초기화 속성 값을 설정함으로써 수행됩니다.
이러한 속성의 초기화 값을 전달하는 배열을 전달하여 이를 수행합니다. 배열의 키는 속성의 이름이고 배열의 값은 위젯 속성에 해당하는 값입니다. 아래와 같이:
$this->widget('CMaskedTextField',array(
'mask'=>'99/99/9999'
));
?>
CWidget을 상속하고 해당 init() 및 run() 메서드를 재정의하여 새 위젯을 정의합니다.
class MyWidget은 CWidget을 확장합니다
{
공용 함수 init()
{
// 이 메서드는 CController::beginWidget()에 의해 호출됩니다.
}
publicfunction run()
{
// 이 메서드는 CController::endWidget()에 의해 호출됩니다.
}
}
위젯은 컨트롤러처럼 자체 보기를 가질 수 있습니다.
기본적으로 위젯의 보기 파일은 위젯 클래스 파일 디렉터리가 포함된 views 하위 디렉터리(protected/comComponents/views) 아래에 있습니다. 이러한 뷰는 컨트롤러와 마찬가지로 CWidget::render()를 호출하여 렌더링할 수 있습니다. 유일한 차이점은 위젯의 보기에는 레이아웃 파일 지원이 없다는 것입니다. 또한 위젯 뷰의 $this는 컨트롤러 인스턴스가 아닌 위젯 인스턴스를 가리킵니다.

3. 시스템 뷰
시스템 뷰 렌더링은 일반적으로 Yii 오류 및 로그 정보를 표시하는 데 사용됩니다.
시스템 뷰의 이름은 몇 가지 규칙을 따릅니다. 예를 들어 "errorXXX"와 같은 이름은 오류 번호 XXX와 함께 CHttpException을 표시하는 뷰를 렌더링하는 데 사용됩니다. 예를 들어 CHttpException이 404 오류를 발생시키면 error404가 표시됩니다.
프레임워크/뷰에서 Yii는 일련의 기본 시스템 뷰를 제공하며 protected/views/system에서 동일한 이름의 뷰 파일을 생성하여 사용자 정의할 수 있습니다.

7. 구성요소
Yii 애플리케이션은 구성요소를 기반으로 구축됩니다. 구성 요소는 CComponent의 인스턴스이거나 해당 하위 클래스 중 하나입니다. 구성 요소를 사용하는 것은 주로 해당 속성에 액세스하고 이를 트리거하거나 처리할 시기를 포함합니다. 기본 클래스 CComponent는 속성과 이벤트가 정의되는 방법을 지정합니다.
1. 구성요소 속성
구성요소의 속성은 객체의 공용 멤버 변수와 같습니다. 읽고 쓸 수 있습니다.
컴포넌트 속성을 정의하려면 컴포넌트 클래스에 공용 멤버 변수만 정의하면 됩니다.
더 유연한 방법은 getter 및 setter 메서드를 정의하는 것입니다. 예를 들면 다음과 같습니다.
public functiongetTextWidth() // Get the textWidth 속성
{
return$this->_textWidth;
}
public functionsetTextWidth($value) //TextWidth 속성 설정
{
$this->_textWidth=$value;
}
위 코드는 textWidth( 이름은 대소문자를 구분합니다.) 속성을 읽으면 getTextWidth()가 호출되고 해당 반환 값은 속성 값이 됩니다. 마찬가지로 속성이 기록되면 setTextWidth()가 호출됩니다. setter 메서드가 정의되지 않은 경우 속성은 읽기 전용이 되며 속성에 기록하면 예외가 발생합니다. getter 및 setter 메서드를 사용하여 속성을 정의하면 속성을 읽거나 쓸 때 추가 논리가 수행될 수 있다는 이점이 있습니다(예: 유효성 검사 수행, 이벤트 트리거).
참고: getter/setter를 통해 정의된 속성과 클래스 멤버 변수 사이에는 미묘한 차이가 있습니다. 속성 이름은 대소문자를 구분하지만 클래스 멤버 변수는 대소문자를 구분합니다.
2. 컴포넌트 이벤트
컴포넌트 이벤트는 이벤트 핸들러라는 메소드를 값으로 사용하는 특수 속성입니다. 이벤트에 메서드를 할당하면 이벤트가 발생할 때 메서드가 자동으로 호출됩니다. 따라서 구성 요소 개발 중에 예상하지 못한 방식으로 구성 요소의 동작이 수정될 수 있습니다.
구성요소 이벤트는 on으로 시작하는 이름으로 정의됩니다. getter/setter 메서드를 통해 정의된 속성과 마찬가지로 이벤트 이름은 대소문자를 구분하지 않습니다. 다음 코드는 onClicked 이벤트를 정의합니다:
public function onClicked($event)
{
$this->raiseEvent('onClicked', $event);
}
여기서 event $event 매개변수는 CEvent의 인스턴스 또는 해당 하위 클래스 중 하나입니다.
다음과 같이 이 이벤트에 메소드를 할당할 수 있습니다.
$comComponent->onClicked=$callback;
여기서 $callback은 유효한 PHP 콜백을 가리킵니다. 전역 함수일 수도 있고 클래스의 메서드일 수도 있습니다. 후자의 경우 배열(array($object,'methodName'))로 제공되어야 합니다.
이벤트 핸들러의 구조는 다음과 같습니다.
함수 메소드 이름($event)
{
...
}
여기서 $event는 이벤트를 설명하는 매개변수입니다. (raiseEvent() 호출에서 발생). $event 매개변수는 CEvent의 인스턴스 또는 해당 서브클래스 중 하나입니다. 최소한 이벤트를 촉발한 사람에 대한 정보가 포함되어 있습니다.
이벤트 핸들러는 PHP 5.3 이상에서 지원되는 익명 함수일 수도 있습니다. 예:
$comComponent->onClicked=function($event) {
...
}
지금 onClicked()를 호출하면 onClicked 이벤트가 트리거됩니다(onClicked( )), 연결된 이벤트 핸들러가 자동으로 호출됩니다.
이벤트는 여러 핸들에 바인딩될 수 있습니다. 이벤트가 발생하면 이러한 핸들러는 이벤트에 바인딩된 순서대로 실행됩니다. 핸들러가 후속 핸들러가 실행되지 않도록 결정하면 $event->handled를 true로 설정합니다.
3. 구성요소 동작
구성 요소에는 믹스인에 대한 지원이 추가되었으며 하나 이상의 동작을 바인딩할 수 있습니다. 동작은 특수한 상속(예: 일반 클래스 상속)이 아니라 함수를 수집하여 바인딩된 구성 요소에 메서드를 상속할 수 있는 개체입니다. 구성 요소는 '다중 상속'을 통해 여러 동작의 바인딩을 구현할 수 있습니다.
Behavior 클래스는 IBehavior 인터페이스를 구현해야 합니다. 대부분의 동작은 CBeavior 에서 상속될 수 있습니다. 동작을 모델에 바인딩해야 하는 경우 해당 모델에 대해 특별히 바인딩 기능을 구현하는 CModelBehavior 또는 CActiveRecordBehavior에서 상속할 수도 있습니다.
비헤이비어를 사용하려면 먼저 이 비헤이비어의 attachment() 메서드를 호출하여 구성 요소에 바인딩해야 합니다. 그런 다음 구성 요소를 통해 이 동작 메서드를 호출할 수 있습니다.
// $name은 구성 요소의 동작을 고유하게 식별합니다.
$comComponent->attachBehavior($name,$behavior);
// test() 행동의 방법이다.
$comComponent->test();
바운드 동작은 구성 요소의 일반 속성처럼 액세스할 수 있습니다. 예를 들어 tree라는 동작이 구성 요소에 바인딩된 경우 다음 코드를 통해 이 동작에 대한 참조를 얻을 수 있습니다.
$behavior=$comComponent->tree;
//는 다음 코드와 같습니다.
// $behavior=$comComponent->asa('tree');
동작은 다음과 같습니다. 일시적으로 금지된 경우 해당 메서드는 구성 요소에서 유효하지 않습니다. 예:
$comComponent->disableBehavior($name);
// 다음 코드는 예외를 발생시킵니다
$comComponent->test();
$comComponent->enableBehavior ($name);
// 이제 사용할 수 있습니다
$comComponent->test();
동일한 이름을 가진 두 개의 동작을 동일한 구성요소에 바인딩하는 것이 가능합니다. 이 경우 먼저 바인딩하는 작업이 우선 적용됩니다.
이벤트와 함께 사용하면 동작이 더욱 강력해집니다. 동작이 구성 요소에 바인딩되면 동작의 일부 메서드가 구성 요소의 일부 이벤트에 바인딩될 수 있습니다. 이런 방식으로 동작을 유기적으로 관찰하거나 구성 요소의 일반적인 실행 흐름을 변경할 수 있습니다.
비헤이비어의 속성은 바인딩된 구성 요소를 통해 액세스할 수도 있습니다. 이러한 속성에는 공용 멤버 변수와 getter 및/또는 setter를 통해 설정된 속성이 포함됩니다. 예를 들어, 동작에 xyz 속성이 있고 이 동작이 $a 구성 요소에 바인딩된 경우 $a->xyz 표현식을 사용하여 이 동작의 속성에 액세스할 수 있습니다.

8. 모듈
모듈은 모델, 뷰, 컨트롤러 및 기타 지원 구성 요소를 포함하는 독립적인 소프트웨어 단위입니다. 여러 면에서 모듈은 애플리케이션처럼 보입니다. 주요 차이점은 모듈을 개별적으로 배포할 수 없으며 애플리케이션 내에 있어야 한다는 것입니다. 사용자는 일반 애플리케이션에서 컨트롤러에 액세스하는 것처럼 모듈의 컨트롤러에 액세스할 수 있습니다.
모듈은 일부 시나리오에서 유용합니다. 대규모 애플리케이션의 경우 여러 모듈로 나누어야 할 수 있으며 각 모듈은 독립적으로 유지 관리 및 배포될 수 있습니다. 사용자 관리, 댓글 관리 등 일부 공통 기능을 모듈 형태로 개발해 향후 프로젝트에서 쉽게 재사용할 수 있습니다.
1. 모듈 생성
모듈은 디렉토리로 구성되며, 디렉토리 이름은 모듈의 고유 ID입니다. 모듈 디렉터리의 구조는 응용 프로그램 기본 디렉터리와 매우 유사합니다. 다음은 fourm 모듈의 일반적인 디렉토리 구조를 나열합니다:
forum/ 모듈 폴더
ForumModule.php 모듈 클래스 파일
comComponents/에는 재사용 가능한 사용자 구성 요소가 포함되어 있습니다.
views/에는 작은 개체의 뷰 파일이 포함되어 있습니다.
controllers/에는 컨트롤러 클래스 파일이 포함되어 있습니다.
DefaultController.php에는 기본 컨트롤러 클래스 파일이 포함되어 있습니다.
extensions/에는 타사 확장 기능이 포함되어 있습니다.
models/에는 모델 클래스 파일이 포함되어 있습니다.
views/에는 컨트롤러 보기 및 레이아웃이 포함되어 있습니다. 파일
layouts/에는 레이아웃 파일
default/가 DefaultController의 뷰 파일
index.php를 포함합니다. 홈페이지 뷰 파일

모듈에는 CWebModule에서 상속된 모듈 클래스가 있어야 합니다. 클래스 이름은 ucfirst($id).'Module' 표현식으로 결정됩니다. 여기서 $id는 모듈의 ID(또는 모듈의 디렉터리 이름)를 나타냅니다. 모듈 클래스는 모듈 코드 간에 공유할 수 있는 정보를 저장하는 중심 장소입니다. 예를 들어, CWebModule::params를 사용하여 모듈 매개변수를 저장하고 CWebModule::comComponents를 사용하여 모듈 수준 애플리케이션 구성 요소를 공유할 수 있습니다.
2. 모듈 사용
모듈을 사용하려면 먼저 애플리케이션 기본 디렉토리의 모듈 폴더에 모듈 디렉토리를 배치합니다. 그런 다음 앱의 모듈 속성에서 모듈 ID를 선언하세요. 예를 들어 위의 포럼 모듈을 사용하려면 다음 애플리케이션 구성을 사용할 수 있습니다.
return array(
...
'modules'=>array('forum',... ) ,
...
);
모듈은 초기 속성 값으로 구성될 수도 있습니다. 접근 방식은 애플리케이션 구성 요소를 구성하는 것과 매우 유사합니다. 예를 들어, 포럼 모듈은 모듈 클래스에 postPerPage라는 속성을 가질 수 있으며, 이는 애플리케이션 구성에서 다음과 같이 구성할 수 있습니다.
return array(
......
'modules'= > ;array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
모듈 인스턴스는 현재 활성 컨트롤러의 모듈 속성을 통해 액세스할 수 있습니다. 모듈 인스턴스 내에서 모듈 수준에서 공유된 정보에 액세스할 수 있습니다. 예를 들어 위의 postPerPage 정보에 액세스하려면 다음 표현식을 사용할 수 있습니다.
$postPerPage=Yii::app()->controller->module->postPerPage;
// 예: $ this 참조가 컨트롤러 인스턴스인 경우 다음 문을 사용할 수 있습니다.
//$postPerPage=$this->module->postPerPage;
모듈의 컨트롤러 작업은 "모듈 ID"를 통해 라우팅될 수 있습니다. /컨트롤러 ID /액션 ID" 또는 "모듈 ID/컨트롤러 클래스 파일이 저장된 하위 디렉터리 이름/컨트롤러 ID/액션 ID"에 액세스합니다. 예를 들어 위의 포럼 모듈에 PostController라는 컨트롤러가 있다고 가정하면 forum/post/create 경로를 통해 이 컨트롤러의 생성 작업에 액세스할 수 있습니다. 이 경로에 해당하는 URL은 http://www.example.com/index.php?r=forum/post/create입니다.
3. 중첩 모듈
모듈은 무한히 중첩될 수 있습니다. 이는 하나의 모듈이 다른 모듈을 포함할 수 있고, 다른 모듈이 다른 모듈을 포함할 수 있음을 의미합니다. 전자를 상위 모듈, 후자를 하위 모듈이라고 부릅니다. 하위 모듈은 이전에 애플리케이션 구성에서 모듈을 정의한 것처럼 상위 모듈의 모듈 속성에서 정의되어야 합니다.
하위 모듈의 컨트롤러 작업에 액세스하려면 경로 상위 모듈 ID/하위 모듈 ID/컨트롤러 ID/작업 ID를 사용해야 합니다.

9. 경로 별칭
경로 별칭은 Yii에서 널리 사용됩니다. 경로 별칭은 디렉터리 또는 파일의 경로와 연결됩니다. 이는 널리 사용되는 네임스페이스 형식과 유사한 도트 구문으로 지정됩니다.
RootAlias.path.to.target
여기서 RootAlias는 YiiBase::setPathOfAlias( )를 호출하여 기존 디렉터리의 별칭입니다. 새로운 경로 별칭을 정의할 수 있습니다. 편의를 위해 Yii는 다음 루트 별칭을 미리 정의합니다.
system: Yii 프레임워크 디렉터리를 나타냅니다.
zii: Zii 라이브러리 디렉터리를 나타냅니다.
application: 애플리케이션의 기본 디렉터리를 나타냅니다. 항목 스크립트 파일이 있는 디렉터리를 나타냅니다.
ext: 모든 타사 확장 기능이 포함된 디렉터리를 나타냅니다.
또한 애플리케이션이 모듈을 사용하는 경우 (Yii)는 각 모듈 ID에 대한 루트 별칭을 정의하여 해당 모듈의 루트 디렉터리를 가리킵니다.
YiiBase::getPathOfAlias()를 사용하면 별칭을 해당 경로로 변환할 수 있습니다.
별칭을 사용하면 클래스 정의를 쉽게 가져올 수 있습니다. 예를 들어 CController 클래스의 정의를 포함하려면 다음 코드를 호출하면 됩니다.
Yii::import('system.web.CController');
가져오기 방법은 include 및 require와 다릅니다. , 더 효율적입니다. 가져온 클래스 정의는 처음 참조될 때까지 실제로 포함되지 않습니다. 동일한 네임스페이스를 여러 번 가져오는 것이 include_once 및 require_once보다 훨씬 빠릅니다.
또한 다음 구문을 사용하여 전체 디렉터리를 가져올 수 있으므로 필요할 때 이 디렉터리의 클래스 파일이 자동으로 포함됩니다.
Yii::import('system.web.*');
가져오기 외에도 별칭은 다른 여러 위치의 클래스를 가리킵니다. 예를 들어 경로 별칭을 Yii::createComponent()에 전달하여 해당 클래스의 인스턴스를 만들 수 있습니다. 클래스 파일이 이전에 포함된 적이 없더라도 마찬가지입니다.
경로 별칭을 네임스페이스와 혼동하지 마세요. 네임스페이스는 클래스 이름이 동일하더라도 서로 구별될 수 있도록 논리적으로 조합한 것입니다. 경로 별칭은 클래스 파일이나 디렉터리를 가리키는 데 사용됩니다. 경로 별칭은 네임스페이스와 충돌하지 않습니다.

위 내용은 Yii Quick Start(2)의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!




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