Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


apricot:ext:interceptor

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
apricot:ext:interceptor [2020/05/27 07:19]
y2sunlight [ベースコントローラの変更]
apricot:ext:interceptor [2020/06/08 16:25] (現在)
tanaka [Apricot インターセプター]
行 22: 行 22:
 インターセプター とはアクションの前処理の事です。ミドルウェアと同じでリクエストを中断してレスポンスオブジェクトを生成することもできますが、アクションの後処理はできません。これを図示すると以下のようになります。 インターセプター とはアクションの前処理の事です。ミドルウェアと同じでリクエストを中断してレスポンスオブジェクトを生成することもできますが、アクションの後処理はできません。これを図示すると以下のようになります。
  
-                  Middleware      Action +=== インターセプター構造 === 
-                 ┌──────────┐     ┌───────────────────────────────────────────┐ + 
-                 |          |      Interceptor   Interceptor   Real Action +{{:apricot:ext:ext-fig02.svg?nolink&800}}
-                          |      ┌─────────┐   ┌─────────┐   ┌──────────┐ | +
-  [Request ] --> | -------> | --> |--|-------->|-->|-------->|-->| ────┐    | |  +
-                    ↓          |    ↓    |      ↓    |          | | +
-                    ↓          └─────────┘   └─────────┘          | |  +
-                    ↓               ↓             ↓        |        | | +
-  [Response] <-- | <------  | <-- | <--------------------------- | <───┘    | | +
-                          |                                  └──────────┘ | +
-                 └──────────┘     └───────────────────────────────────────────┘+
  
 上図から分かるようにミドルウェアパイプラインから見ると、インターセプターはアクションに含まれます。ミドルウェアとの一番の違いは、ミドルウェアは基本的に全てのコントローラを対象としているのに対し、インターセプターは、各コントローラで独自に設定ができるという点です。 上図から分かるようにミドルウェアパイプラインから見ると、インターセプターはアクションに含まれます。ミドルウェアとの一番の違いは、ミドルウェアは基本的に全てのコントローラを対象としているのに対し、インターセプターは、各コントローラで独自に設定ができるという点です。
行 69: 行 61:
     protected function intercept($actionName, $interceptors)     protected function intercept($actionName, $interceptors)
     {     {
-        if ($actionName != \Core\Application::getInstance()->getActionName()) return; +        if ($actionName == \Core\Application::getInstance()->getActionName()) 
- +        { 
-        $interceptor_arr = is_array($interceptors) ? $interceptors : array_slice(func_get_args(),1); +            $interceptor_arr = is_array($interceptors) ? $interceptors : array_slice(func_get_args(),1); 
-        $this->interceptors = array_merge($this->interceptors , $interceptor_arr);+            $this->interceptors = array_merge($this->interceptors , $interceptor_arr); 
 +        }
     }     }
  
行 141: 行 134:
     * リクエストされているアクション(Application::getActionName())が対象となります。     * リクエストされているアクション(Application::getActionName())が対象となります。
     * アクションにインターセプターを追加します。     * アクションにインターセプターを追加します。
-    * BaseControllerは、インターセプターを配列( <nowiki>$this->$interceptors</nowiki> )で管理しています。+    * BaseControllerは、インターセプターを配列( <nowiki>$this->interceptors</nowiki> )で管理しています。
  
   * ''invokeAction($actionName, $params)'' メソッド   * ''invokeAction($actionName, $params)'' メソッド
apricot/ext/interceptor.1590531562.txt.gz · 最終更新: 2020/05/27 07:19 by y2sunlight