Intercepor プラグインを作ってみました。
package.xml はもちろんのこと、 DocBlock コメントも皆無ですが...
設定ポイントの解説は id:perezvon さんの http://d.hatena.ne.jp/perezvon/20070126/1169800012 を真似させていただきました。
Piece_Unity_Plugin_Interceptor_Mobile
携帯端末の判定、レンダラ設定の上書き、出力エンコーディング変換を行うための Interceptor 集 (ダウンロード)
Interceptor_MobileUserAgent で User-Agent の判定を行い、Piece_Unity_Context の attribute に以下の値を設定します。
- MobileUserAgent_detector (Net_UserAgent_Mobile_xxx のインスタンス)
- MobileUserAgent_isMobile (携帯端末か否か)
- MobileUserAgent_supportsCookie (Cookie に対応する端末か否か)
Interceptor_MobileRenderer と Interceptor_MobileOutputFilter では MobileUserAgent_isMobile の値を調べるので、Interceptor_MobileUserAgent はこれらより先に読み込まれなければいけません。
Piece_Unity_Plugin_Interceptor_MobileUserAgent の設定ポイント
キー |
説明 |
デフォルト値 |
forcedUserAgent |
$_SERVER['HTTP_USER_AGENT'] を上書きする文字列 (開発用) |
null |
lazyDetection |
Net_UserAgent_Mobile を用いずに大雑把な判定をするか否か |
false |
Piece_Unity_Plugin_Interceptor_MobileRenderer の設定ポイント
Piece_Unity_Plugin_Renderer_xxx の設定を上書きするので、設定ポイントは View プラグインの renderer 設定ポイントで指定されたレンダラに依存します。
例えば携帯端末用のテンプレートを別にしたい場合は以下のように設定します。
携帯端末用のテンプレートは PC 用のテンプレートと同じエンコーディング (UTF-8 を推奨) で作成し、meta 要素の Content-Type には "text/html; charset=Shift_JIS" と、Interceptor_MobileOutputFilter の headerCharset と同じエンコーディングを指定します。
(エディタによってはファイルのエンコーディングと meta 要素とで異るエンコーディングが指定されている旨の警告が出ることがあります)
- name: InterceptorChain
point:
- name: interceptors
type: extension
value:
- Interceptor_NullByteAttackPreventation
- Interceptor_SessionStart
- Interceptor_MobileUserAgent
- Interceptor_MobileRenderer
- Interceptor_MobileOutputFilter
- Interceptor_Authentication
- name: Renderer_Flexy
point:
- name: templateDir
type: configuration
value: ../webapp/templates/FlowName
- name: compileDir
type: configuration
value: ../webapp/compiled-templates/FlowName
- name: useLayout
type: configuration
value: true
- name: layoutView
type: configuration
value: Layout
- name: layoutDirectory
type: configuration
value: ../webapp/templates/Layout
- name: layoutCompileDirectory
type: configuration
value: ../webapp/compiled-templates/Layout
- name: Interceptor_MobileRenderer
point:
- name: templateDir
type: configuration
value: ../webapp/templates/FlowName_Mobile
- name: compileDir
type: configuration
value: ../webapp/compiled-templates/FlowName_Mobile
- name: layoutView
type: configuration
value: Layout_Mobile
Cookie をサポートしていない携帯端末で同一フロー内リダイレクトする際には、renderer が Renderer_Redirection でない限りは上書きされないので、アクションクラスの _prepare() メソッドに以下のような記述をします。
if (!$this->_payload->getAttribute('MobileUserAgent_supportsCookie')) {
$config = &$this->_payload->getConfiguration();
$config->setConfiguration('Renderer_Redirection', 'addSessionID', true);
}
Piece_Unity_Plugin_Interceptor_MobileOutputFilter の設定ポイント
キー |
説明 |
デフォルト値 |
headerCharset |
Content-Type HTTP ヘッダに挿入される値 |
Shift_JIS |
outputCharset |
出力 (変換先) エンコーディング |
SJIS-win |
変換元エンコーディング (mbstring.internal_encoding) は php.ini 等で別途適切な値に設定されている必要があります。
Piece_Unity_Plugin_Interceptor_GarbageCollection
一時ファイルのガーベッジコレクションを行うための Interceptor (ダウンロード)
設定ポイント
キー |
説明 |
デフォルト値 |
targetDirectories |
ガーベッジコレクション対象ディレクトリ |
array() |
probability |
ガーベッジコレクション実行確率の分子 |
1 |
divisor |
ガーベッジコレクション実行確率の分母 |
1000 |
lifeTime |
一時ファイルの有効期限 (秒) |
3600 |
recursionDepth |
再帰深度 |
0 |
removeEmptySubDirectory |
空のサブディレクトリを削除するか否か |
false |
byAccessTime |
有効期限をファイルの最終アクセス時刻で判定するか否か デフォルトではファイルの更新時刻で判定する |
false |