Yiiのコンポーネントの仕組み
コンポーネントの仕組みはYiiのシステム全体の思想的本質です。Yiiを使用する前に、まずコンポーネントの仕組みを理解する必要があります。この仕組みが理解できない場合は、Yiiのソースコードを読むと理解できます。とても難しいでしょう。コンポーネントメカニズムは Yii フレームワークに無限の柔軟性と拡張性を与えます Yii フレームワークの基本構造はコンポーネントであると言っても過言ではありません。 CApplication オブジェクト、コントローラー、ルート マネージャー (urlManager) と同じくらい大きくても、他のプラグインと同じくらい小さくても、それらはすべてコンポーネントの形式で存在します。
Yiiコンポーネントとは何ですか?
インスタンス化してCComponent から継承できる Yii のほとんどすべてのクラスをコンポーネントと呼ぶことができます。
コンポーネントの特徴は何ですか?
CComponent クラスから継承され (直接継承または間接継承)、イベントおよび動作メカニズムがあり、そのさまざまなプロパティを構成ファイルで定義できます。
コンポーネントを作成するには?
カスタム クラスを作成し、それを CComponent クラスから継承します。
CComponent クラスは、すべてのコンポーネントの基本クラスです。このクラスは、Yii フレームワークで重要です。具体的には、このクラスは主に次の 3 つの関数を実装します。
1. phpのマジックメソッド__set、__getを使用して、クラスの属性を定義します。つまり、コンポーネントの属性は、定義された public メンバー属性の使用に加えて、CComponent によって実装された関数を使用して、setXXX、getXXX メソッドを拡張することで属性の設定と取得を拡張することもできます。一部の特殊な属性については、設定時に正しい形式であることを確認する必要がある場合があります。これはこの場合に役立ちます。
クラスのWebページはCComponentを拡張します {
公開 $title;
プライベート $_url;
パブリック関数 setUrl($value='') {
if(is_url($value)){
$this->_url = $value;
}
}
パブリック関数 getUrl() {
$this->_url を返す ;
}
}
$page = 新しいウェブページ();
$page->title = "ページタイトル";
$page->url = "/index.php"; # $page->seturl("/index.php");を呼び出します。 echo $page->url #$page->geturl();
言い換えると、コンポーネントで
setXXX、getXXXが定義されている場合、クラスの外で通常の属性アクセス フォームを使用できます。
2.
setter、getterを使用してイベント処理インターフェイスのバインディングを実装します。イベントメカニズムは Yii にも遍在しており、Yii はコンポーネント間の関数呼び出し (オブザーバーパターン) を実装するために多数のイベントメカニズムを使用します。 では、コンポーネントのイベントを定義するにはどうすればよいでしょうか? Yii
は、以下に定義されているように、イベントと呼ばれるフォームonXX のメソッドを規定します。
公開関数 onSubmit($event) {
$this->raiseEvent('onSubmit', $event);
}
}
上記の修正されたコードを使用して、car コンポーネントの onStop イベントが作成されます。しかし、バインディング イベントは正確には何に使用されるのでしょうか?イベントをバインドする機能は、コンポーネントが一連のイベントを生成したときに、イベント ハンドラーを通じてバインドされた各オブジェクトに独自のイベントを通知することです。たとえば、フォームが送信されたときにこのイベントをログ コンポーネントに通知し、記録させたいとします。 $form = 新しいフォーム(); $form ->attachEventHandler( 'onSubmit', array($logOjbect, "saveLog") ); $form->data = $_POST; $form->onSubmit( new CEvent($form, array('data'=>$_POST) ) ); #イベントの実行をアクティブ化し、イベント処理インターフェイスを呼び出しますlogObject::saveLog そして、logObjectのコードは次のようになります: パブリック関数 saveLog($event) { $event->sender === $form; $event->params ; } } 明らかに、この方法は従来の呼び出し方法よりもはるかに柔軟で概念的に高度です。 さらに、setterメソッドを使用してイベントをバインドすることができます: $form->onSubmit = array($logOjbect, "saveLog") ; 注: form クラスは、onSubmit メンバー属性を定義しません。 同時に、Yiiは、JavaScriptのaddEventListenerと同様に、複数の処理インターフェースを同じイベントにバインドするメカニズムを実装します。 イベントハンドラーインターフェースLiuyaは、phpのcallback型形式を標準として使用しています。詳細については、http://php.net/manual/en/ language.types.callableを参照してください。 php YiiのCLogRouter::init()のコードのような: もちろん、Yii::app()->onEndRequest = array($this,'processLogs'); onEndRequestイベントはCApplicationで定義されています: if(!$this->_end){ $this->_ended=true; $this->raiseEvent('onEndRequest',$event); } } イベントを定義し、プロセッサをイベントにバインドするだけでは十分ではありません。イベントは、CApplication::run() メソッドのロジックなど、適切な場所でアクティブ化する必要があります。
$this->onBeginRequest(new CEvent($this)); $this->processRequest(); if($this->hasEventHandler('onEndRequest')) $this->onEndRequest(new CEvent($this)); }
イベントを定義し、イベント処理インターフェイスをバインドし、イベントをアクティブ化する
yiiの動作メカニズムは、他のオブジェクトのメソッドやプロパティを直接使用するコンポーネントとして単純に考えることができます( で導入されたtrait構造のように、動作と同様の機能があります)
特性 SayWorld { パブリック関数 SayHello() { world!'; } } クラス MyHelloWorld は Base { SayWorld を使用します; } $o = 新しい MyHelloWorld(); $o->sayHello(); hello world! ビヘイビアは、さまざまなイベントとその処理手順を定義する特別なクラスです。まず、イベントとそれに対応するメソッドを含むビヘイビア クラスを定義します。 クラス MyAppBehavior は CBehavior を拡張します { public $status = "アプリの動作が終了しました。";
戻り配列 ( # NendRequest インシデント
);
}
パブリック関数 appEnd($event = null) { echo get_class($this); } }
$form->属性 = $_POST ; $form->attachBehavior )
'クラス' => '',
'strip_tags' => true 、 )); $form->filter(new CEvent($form) ) ; }
CBehavior { public $strip_tags = false ;
パブリック関数イベント() { 配列を返す( 'フィルター' => 'フィルターHtml', ); }
$input = $event->sender->属性 ; $event->sender->attributes = $this->filter($input); } }
} }
Yii の個人的な簡単な理解
class logObject {
Yii::app()->attachEventHandler('onEndRequest',array($this,'processLogs'));
public function onEndRequest($event){
if($this->hasEventHandler('onBeginRequest')) (転載元: http://zhangxugg-163-com.iteye.com/blog/1673325)
コンポーネント: インスタンス化して CComponent から継承できる Yii のほぼすべてのクラスは、コンポーネントと呼ぶことができます。
イベント: コンポーネント間で呼び出すためのクラスメソッド。識別子として on で始まります。
動作: 特性特性と同様、コンポーネントが直接使用する特別なクラスです。

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

tostoreauser'snameInappession、starthessession withsession_start()、thensignthenameto $ _session ['username']。1)ousession_start()toinitializethessession.2)assighttheuser'snameto $ _ session ['username']

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









