Yii 프레임워크 공식 가이드 시리즈 10 - 기본: 구성 요소

黄舟
풀어 주다: 2023-03-05 17:40:01
원래의
1077명이 탐색했습니다.



Yii 애플리케이션은 구성 요소를 기반으로 구축되었습니다. 구성 요소는 CComponent 또는 해당 하위 클래스의 인스턴스입니다. 구성 요소를 사용하는 것은 주로 해당 속성에 액세스하고 이를 트리거하거나 처리할 시기를 포함합니다. 기본 클래스 CComponent는 속성과 이벤트가 정의되는 방법을 지정합니다.

1. 컴포넌트 속성

컴포넌트의 속성은 객체의 공용 멤버 변수와 같습니다. 읽고 쓸 수 있습니다. 예:


$width=$component->textWidth;     // 获取 textWidth 属性
$component->enableCaching=true;   // 设置 enableCaching 属性
로그인 후 복사

구성 요소 속성을 정의하려면 구성 요소 클래스에서 공용 멤버 변수만 정의하면 됩니다. . 더 유연한 방법은 getter 및 setter 메서드를 정의하는 것입니다. 예를 들면 다음과 같습니다.


public function getTextWidth()
{
    return $this->_textWidth;
}

public function setTextWidth($value)
{
    $this->_textWidth=$value;
}
로그인 후 복사

위 코드는 쓰기 가능한 메서드를 정의합니다. 속성 이름은 textWidth입니다(이름은 대소문자를 구분하지 않음). 속성을 읽으면 getTextWidth()이 호출되고 해당 반환 값은 속성 값이 됩니다. 마찬가지로 속성을 쓰면 setTextWidth()이 호출됩니다. setter 메서드가 정의되지 않은 경우 속성은 읽기 전용이 되며 속성에 기록하면 예외가 발생합니다. getter 및 setter 메서드를 사용하여 속성을 정의하면 속성을 읽거나 쓸 때 추가 논리가 수행될 수 있다는 이점이 있습니다(예: 유효성 검사 수행, 이벤트 트리거).

참고: getter/setter를 통해 정의된 속성과 클래스 멤버 변수 사이에는 미묘한 차이가 있습니다. 전자 이름은 대소문자를 구분하지만 후자 이름은 대소문자를 구분합니다.

2. 컴포넌트 이벤트

컴포넌트 이벤트는 事件句柄 (event handlers)라는 일부 메소드를 값으로 사용하는 특수 속성입니다. 이벤트에 메서드를 연결(할당)하면 이벤트가 발생한 위치에서 메서드가 자동으로 호출됩니다. 따라서 구성 요소 개발 중에 예상하지 못한 방식으로 구성 요소의 동작이 수정될 수 있습니다.

구성 요소 이벤트는 on 로 시작하는 명명 방법으로 정의됩니다. getter/setter 메서드를 통해 정의된 속성과 마찬가지로 이벤트 이름은 대소문자를 구분하지 않습니다. 다음 코드는 onClicked 이벤트를 정의합니다.


public function onClicked($event)
{
    $this->raiseEvent('onClicked', $event);
}
로그인 후 복사

여기 $event는 이벤트 매개변수가 CEvent 또는 다른 인스턴스입니다. 서브클래스의.

이 이벤트에 다음과 같은 방법을 추가할 수 있습니다.


$component->onClicked=$callback;
로그인 후 복사

여기 $callback점 유효한 PHP 콜백에. 전역 함수일 수도 있고 클래스의 메서드일 수도 있습니다. 후자의 경우 배열로 제공되어야 합니다: array($object,'methodName').

이벤트 핸들의 구조는 다음과 같습니다:


function methodName($event)
{
    ......
}
로그인 후 복사

여기 $event는 이벤트를 설명하는 매개변수입니다(raiseEvent() 호출에서 가져옴). $event 매개변수는 CEvent 또는 해당 하위 클래스의 인스턴스입니다. 최소한 이벤트를 트리거한 사람에 대한 정보가 포함되어 있습니다.

버전 1.0.10부터 이벤트 핸들러는 PHP 5.3 이상에서 지원되는 익명 함수일 수도 있습니다. 예를 들어,


$component->onClicked=function($event) {
    ......
}
로그인 후 복사

이제 onClicked()를 호출하면 onClicked 이벤트가 트리거됩니다( ) 첨부된 이벤트 핸들러가 자동으로 호출됩니다. onClicked()

이벤트는 여러 핸들에 바인딩될 수 있습니다. 이벤트가 트리거되면 이러한 핸들러는 이벤트에 바인딩된 순서대로 실행됩니다. 핸들러가 후속 핸들러가 실행되는 것을 방지하기로 결정한 경우 $event->handled를 true로 설정할 수 있습니다.

3. 구성 요소 동작

버전 1.0.2부터 구성 요소에 믹스인 지원이 추가되었으며 하나 이상의 동작을 바인딩할 수 있습니다.

동작은 특수 상속(예: 일반 클래스 상속)이 아닌 함수를 수집하여 바인딩된 구성 요소에 의해 메서드를 구현할 수 있는 개체입니다. 여러 동작의 바인딩을 구현하는 데 사용됩니다. 继承(inherited)

동작 클래스는 IBehavior 인터페이스를 구현해야 합니다. 대부분의 동작은 CBehavior 에서 상속될 수 있습니다. 동작을 모델에 바인딩해야 하는 경우 해당 모델에 대해 특별히 바인딩 기능을 구현하는 CModelBehavior 또는 CActiveRecordBehavior에서 상속할 수도 있습니다.

비헤이비어를 사용하려면 먼저 이 비헤이비어의 attachment() 메서드를 호출하여 구성 요소에 바인딩해야 합니다. 그런 다음 구성 요소를 통해 이 동작 메서드를 호출할 수 있습니다.


// $name 在组件中实现了对行为的唯一识别
$component->attachBehavior($name,$behavior);
// test() 是行为中的方法。
$component->test();
로그인 후 복사

바운드 동작은 구성 요소와 같을 수 있습니다. 정상적인 속성. 예를 들어

이라는 동작이 구성 요소에 바인딩된 경우 다음 코드를 통해 이 동작에 대한 참조를 얻을 수 있습니다. tree


$behavior=$component->tree;
// 等于下行代码:
// $behavior=$component->asa('tree');
로그인 후 복사

동작을 일시적으로 비활성화할 수 있으며, 이때 해당 메서드는 구성 요소에서 유효하지 않게 됩니다. 예를 들면 다음과 같습니다. 🎜>


$component->disableBehavior($name);
// 下面的代码将抛出一个异常
$component->test();
$component->enableBehavior($name);
// 现在就可以使用了
$component->test();
로그인 후 복사

两个同名行为绑定到同一个组件下是有可能的。在这种情况下,先绑定的行为则拥有优先权。

当和 events, 一起使用时,行为会更加强大。当行为被绑定到组件时,行为里的一些方法就可以绑定到组件的一些事件上了. 这样一来,行为就可以观察或者改变组件的常规执行流程。

自版本 1.1.0 开始,一个行为的属性也可以通过绑定到的组件来访问。 这些属性包含公共成员变量以及通过 getters 和/或 setters 方式设置的属性。 例如, 若一个行为有一个 xyz 的属性,此行为被绑定到组件 $a,然后我们可以使用表达式 $a->xyz 访问此行为的属性。

以上就是Yii框架官方指南系列10——基础知识:组件的内容,更多相关内容请关注PHP中文网(www.php.cn)!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿