目次
1. コンポーネントのプロパティ
2. 组件事件
3. 组件行为
ホームページ バックエンド開発 PHPチュートリアル Yii Framework 公式ガイド シリーズ 10 - 基本: コンポーネント

Yii Framework 公式ガイド シリーズ 10 - 基本: コンポーネント

Feb 11, 2017 am 09:41 AM



Yii アプリケーションはコンポーネントに基づいて構築されています。コンポーネントは、CComponent またはそのサブクラスのインスタンスです。コンポーネントの使用には、主にそのプロパティへのアクセスと、いつトリガーまたは処理するかが含まれます。 基本クラス CComponent は、プロパティとイベントの定義方法を指定します。

1. コンポーネントのプロパティ

コンポーネントのプロパティは、オブジェクトのパブリック メンバー変数のようなものです。読み取りと書き込みが可能です。例:


$width=$component->textWidth;     // 获取 textWidth 属性
$component->enableCaching=true;   // 设置 enableCaching 属性
ログイン後にコピー

コンポーネントのプロパティを定義するには、コンポーネント クラスでパブリック メンバー変数を定義するだけで済みます。より柔軟な方法は、ゲッター メソッドとセッター メソッドを定義することです。例:


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

public function setTextWidth($value)
{
    $this->_textWidth=$value;
}
ログイン後にコピー

上記のコードは、textWidth という名前の書き込み可能なプロパティを定義します (名前は大文字と小文字が区別されません)。 )。 プロパティが読み取られるときは、 getTextWidth() が呼び出され、その戻り値がプロパティ値になります。同様に、プロパティが書き込まれるときは、 setTextWidth() が呼び出されます。 setter メソッドが定義されていない場合、プロパティは読み取り専用となり、書き込まれると例外がスローされます。 getter メソッドと setter メソッドを使用してプロパティを定義する利点の 1 つは、プロパティの読み取りまたは書き込み時に追加のロジック (検証の実行、イベントのトリガーなど) を実行できることです。 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 或其子类的实例。

我们可以附加一个方法到此 event,如下所示:


$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 开始,组件已添加了对 mixin 的支持,并可以绑定一个或多个行为。 行为 是一个对象,其方法可以被它绑定的部件通过收集功能的方式来实现 继承(inherited), 而不是专有化继承(即普通的类继承).一个部件可以以'多重继承'的方式实现多个行为的绑定.

行为类必须实现 IBehavior 接口。 大多数行为可以继承自 CBehavior 。如果一个行为需要绑定到一个 模型, 它也可以从专为模型实现绑定特性的 CModelBehavior 或 CActiveRecordBehavior 继承。

要使用一个行为,它必须首先通过调用此行为的 attach() 方法绑定到一个组件。然后我们就可以通过组件调用此行为方法:


// $name 在组件中实现了对行为的唯一识别
$component->attachBehavior($name,$behavior);
// test() 是行为中的方法。
$component->test();
ログイン後にコピー

已绑定的行为可以像一个组件中的普通属性一样访问。 例如,如果一个名为 tree

注: ゲッター/セッターを介して定義されたプロパティとクラス メンバー変数の間には微妙な違いがあります。前者の名前では大文字と小文字が区別されますが、後者の名前では大文字と小文字が区別されます。


2. コンポーネント イベント

コンポーネント イベントは、イベント ハンドラー と呼ばれるメソッドを値として使用する特別なプロパティです。 メソッドをイベントにアタッチ (割り当て) すると、イベントが発生した場所でメソッドが自動的に呼び出されます。したがって、コンポーネントの動作は、コンポーネント開発中に予期しない方法で変更される可能性があります。

コンポーネント イベントは、on で始まる命名メソッドを使用して定義されます。 getter/setter メソッドを通じて定義されたプロパティと同様、イベント名では大文字と小文字が区別されません。次のコードは、onClicked イベントを定義します。


$behavior=$component->tree;
// 等于下行代码:
// $behavior=$component->asa('tree');
ログイン後にコピー

🎜 ここでイベント パラメータとして使用される $event は、CEvent またはそのサブクラスのインスタンスです。 🎜🎜次のようにこのイベントにメソッドをアタッチできます: 🎜🎜🎜🎜🎜🎜
$component->disableBehavior($name);
// 下面的代码将抛出一个异常
$component->test();
$component->enableBehavior($name);
// 现在就可以使用了
$component->test();
ログイン後にコピー
ログイン後にコピー
🎜🎜🎜ここで、$callback は有効な PHP コールバックを指します。グローバル関数またはクラス内のメソッドにすることができます。 後者の場合は、配列として指定する必要があります: array($object,'methodName')。イベント ハンドラーの構造は次のとおりです: 🎜🎜🎜🎜🎜🎜rrreee🎜 🎜🎜ここ $event はイベントを説明するパラメータです (raiseEvent() 呼び出しから取得されます)。 $event パラメータは、CEvent またはそのサブクラスの 1 つのインスタンスです。 少なくとも、誰がイベントをトリガーしたかに関する情報が含まれています。 🎜🎜バージョン 1.0.10 以降、イベント ハンドラーは PHP 5.3 以降でサポートされる匿名関数にすることもできます。たとえば、🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜ここで onClicked() を呼び出すと、onClicked イベントがトリガーされます (onClicked() )、アタッチされたイベント ハンドラーが自動的に呼び出されます。 🎜🎜 イベントは複数のハンドルにバインドできます。イベントが発生すると、これらのハンドラーはイベントにバインドされた順序で実行されます。ハンドラーが後続のハンドラーの実行を禁止すると決定した場合、$event->handled を true に設定できます。 🎜🎜3. コンポーネントの動作🎜🎜 バージョン 1.0.2 以降、コンポーネントはミックスインのサポートを追加し、1 つ以上の動作をバインドできるようになりました。 <em>動作</em>は、特殊な継承(つまり、コンポーネントが実装できる通常のクラス継承)ではなく、<code>継承された関数を収集することによってバインドされているコンポーネントによってメソッドを実装できるオブジェクトです。 「多重継承」の形式での複数の動作のバインディング 🎜🎜動作クラスは IBehavior インターフェイスを実装する必要があります。 ほとんどの動作は CBehavior から継承できます。動作をモデルにバインドする必要がある場合は、モデル専用のバインド機能を実装する CModelBehavior または CActiveRecordBehavior から継承することもできます。 🎜🎜ビヘイビアを使用するには、まずこのビヘイビアーのattach() メソッドを呼び出して、ビヘイビアーをコンポーネントにバインドする必要があります。次に、コンポーネントを通じてこの動作メソッドを呼び出すことができます。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜 バインドされた動作は、コンポーネントの通常のプロパティと同様にアクセスできます。 たとえば、tree という名前のビヘイビアーがコンポーネントにバインドされている場合、次のコードを通じてこのビヘイビアーへの参照を取得できます。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜の動作は一時的に無効にすることができます。その場合、そのメソッドはコンポーネント内で無効になります。例: 🎜🎜🎜🎜🎜。
$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)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 10 旧バージョンコンポーネント DirectPlay のインストール方法 Windows 10 旧バージョンコンポーネント DirectPlay のインストール方法 Dec 28, 2023 pm 03:43 PM

win10で一部のゲームをプレイすると、画面がフリーズしたり画面がぼやけるなどの不具合が多くのユーザーに発生しますが、現時点ではダイレクトプレイ機能をオンにすることで問題を解決でき、機能の操作方法も非常に簡単です。 win10 の古いコンポーネントである Directplay をインストールする方法 1. 検索ボックスに「コントロール パネル」と入力して開きます 2. 表示方法として大きなアイコンを選択します 3. 「プログラムと機能」を見つけます 4. 左側をクリックして有効にするか、 Win 機能をオフにする 5. ここで古いバージョンを選択します チェックボックスをオンにするだけです

Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Vueを使用してカレンダーコンポーネントを実装するにはどうすればよいですか? Jun 25, 2023 pm 01:28 PM

Vue は非常に人気のあるフロントエンド フレームワークであり、コンポーネント化、データ バインディング、イベント処理など、開発者が効率的で柔軟で保守が容易な Web アプリケーションを構築するのに役立つ多くのツールと機能を提供します。この記事では、Vueを使ってカレンダーコンポーネントを実装する方法を紹介します。 1. 要件の分析 まず、このカレンダー コンポーネントの要件を分析する必要があります。基本的なカレンダーには次の機能が必要です: 当月のカレンダー ページの表示、前月または翌月への切り替えのサポート、特定の日のクリックのサポート、

PHP で Yii フレームワークを使用する方法 PHP で Yii フレームワークを使用する方法 Jun 27, 2023 pm 07:00 PM

Web アプリケーションの急速な開発に伴い、最新の Web 開発は重要なスキルになりました。効率的な Web アプリケーションを開発するために多くのフレームワークやツールが利用できますが、その中でも Yii フレームワークは非常に人気のあるフレームワークです。 Yii は、最新のデザインパターンとテクノロジーを使用し、強力なツールとコンポーネントを提供し、複雑な Web アプリケーションの構築に最適な、高性能のコンポーネントベースの PHP フレームワークです。この記事では、Yii フレームワークを使用して Web アプリケーションを構築する方法について説明します。まずYiiフレームワークをインストールし、

Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Angular コンポーネントとその表示プロパティ: 非ブロックのデフォルト値について Mar 15, 2024 pm 04:51 PM

Angular フレームワークのコンポーネントのデフォルトの表示動作は、ブロックレベルの要素ではありません。この設計の選択により、コンポーネント スタイルのカプセル化が促進され、開発者が各コンポーネントの表示方法を意識的に定義することが促進されます。 CSS プロパティの表示を明示的に設定することで、Angular コンポーネントの表示を完全に制御して、目的のレイアウトと応答性を実現できます。

古いバージョンのwin10コンポーネントの設定を開く方法 古いバージョンのwin10コンポーネントの設定を開く方法 Dec 22, 2023 am 08:45 AM

Win10 の古いバージョンのコンポーネントは、デフォルトで閉じられていることが多いため、ユーザー自身が設定で有効にする必要があります。まず、設定を入力する必要があります。操作は非常に簡単です。以下の手順に従ってください。Win10 の古いバージョンはどこにありますか?バージョン コンポーネント? 開く 1. [スタート] をクリックし、[Win システム] をクリックします 2. クリックしてコントロール パネルに入ります 3. 次に、下のプログラムをクリックします 4. [Win 機能を有効または無効にする] をクリックします 5. ここで必要なものを選択できます開く

Vue コンポーネントの実践: ページング コンポーネントの開発 Vue コンポーネントの実践: ページング コンポーネントの開発 Nov 24, 2023 am 08:56 AM

Vue コンポーネントの実践: ページング コンポーネント開発の概要 Web アプリケーションでは、ページング機能は不可欠なコンポーネントです。優れたページング コンポーネントは、プレゼンテーションがシンプルかつ明確で、機能が豊富で、統合と使用が簡単である必要があります。この記事では、Vue.js フレームワークを使用して高度にカスタマイズ可能なページング コンポーネントを開発する方法を紹介します。 Vueコンポーネントを使った開発方法をコード例を通して詳しく解説します。テクノロジースタック Vue.js2.xJavaScript (ES6) HTML5 および CSS3 開発環境

Vue でコンポーネントの動的な読み込みと切り替えを処理する方法 Vue でコンポーネントの動的な読み込みと切り替えを処理する方法 Oct 15, 2023 pm 04:34 PM

Vue でのコンポーネントの動的な読み込みと切り替えの処理 Vue は、コンポーネントの動的な読み込みと切り替えを処理するためのさまざまな柔軟な関数を提供する人気のある JavaScript フレームワークです。この記事では、Vue でコンポーネントの動的な読み込みと切り替えを処理するいくつかの方法について説明し、具体的なコード例を示します。コンポーネントを動的にロードするとは、実行時に必要に応じてコンポーネントを動的にロードすることを意味します。これにより、関連するコンポーネントが必要な場合にのみ読み込まれるため、アプリケーションのパフォーマンスと読み込み速度が向上します。 Vue は async と awa を提供します

Vueコンポーネント開発:プログレスバーコンポーネントの実装方法 Vueコンポーネント開発:プログレスバーコンポーネントの実装方法 Nov 24, 2023 am 08:56 AM

Vue コンポーネントの開発: プログレス バー コンポーネントの実装方法 はじめに: Web 開発では、プログレス バーは一般的な UI コンポーネントであり、データ要求、ファイルのアップロード、フォームの送信などのシナリオで操作の進行状況を表示するためによく使用されます。 Vue.jsではコンポーネントをカスタマイズすることで簡単にプログレスバーコンポーネントを実装することができますので、本記事ではその実装方法と具体的なコード例を紹介します。 Vue.js初心者の参考になれば幸いです。コンポーネントの構造とスタイル まず、プログレスバーコンポーネントの基本構造とスタイルを定義する必要があります。

See all articles