8

onBeginRequestイベントでコードを実行したいと思います。
どこでそれをしますか?私はこれをコアライブラリコードに追加することを想定していないと思います。
私はYiiで完全に初心者です

4

2 に答える 2

15

onBeginRequestとonEndRequestを使用する場合は、構成ファイルに次の行を追加することで使用できます。

return array (
...
'onBeginRequest'=>array('Y', 'getStats'),
'onEndRequest'=>array('Y', 'writeStats'),
...
)

またはあなたはそれをインラインで行うことができます

Yii::app()->onBeginRequest= array('Y', 'getStats');
Yii::app()->onEndRequest= array('Y', 'writeStats');

ここYで、はクラス名でありgetStatswriteStatsはこのクラスのメソッドです。Yここで、次のように宣言されたクラスがあると想像してください。

class Y {
    public function getStats ($event) {
        // Here you put all needed code to start stats collection
    }
    public function writeStats ($event) {
        // Here you put all needed code to save collected stats
    }
}

したがって、すべてのリクエストで、両方のメソッドが自動的に実行されます。もちろん、「onBeginRequestメソッドを単純にオーバーロードしないのはなぜですか?」と考えることができます。しかし、まず第一に、イベントを使用すると、クラスを拡張して繰り返しコードを実行することはできません。また、さまざまな場所で宣言されたさまざまなクラスのさまざまなメソッドを実行することもできます。だからあなたは追加することができます

Yii::app()->onEndRequest= array('YClass', 'someMethod');

以前のイベントハンドラーと一緒にアプリケーションの他の部分で実行され、リクエスト処理後の両方Y->writeStatsで実行されます。YClass->someMethodこれにより、ソースコードを変更したり、Yiiの基本クラスを拡張したりすることなく、ほぼすべての複雑さの拡張コンポーネントを作成できます。

于 2011-09-14T17:35:15.913 に答える
2

これは、出力が開始される前にファイル内のほぼどこでも実行できると思います。したがって、通常はYii Webアプリの「保護された」フォルダーにあるコントローラー、ビュー、またはカスタムクラスで機能するはずです。参考までに、これらのファイルはコアファイルではなく、Yiiフレームワークファイル(ブートストラップindex.phpファイルの「$ yii」変数で参照)とは異なり、(ほぼ)自由に編集できます。

関数は次のようになります。

Yii::app()->onbeginRequest = create_function('$event', 'return function_name_a();');
Yii::app()->onendRequest = create_function('$event', 'return function_name_b();');
于 2011-09-14T00:49:37.870 に答える