Dispatcher_Continuationプラグイン
(Piece_Unity >= 0.1.0)
概要
ステートフルアプリケーションコンポーネントのためのディスパッチャ
コンポーネント
説明
string invoke (void)
このプラグインは、ステートフルアプリケーションコンポーネントを動作させるために使われるディスパッチャです。このディスパッチャは新規にフロー実行を開始するかフロー実行チケットが指し示す既存のフロー実行を復元し、ビューステートに設定されたビュー文字列を返します。
ステートフル、セキュア、Webフローコントロール、イベントドリブンといったPiece_Unityの特徴は、このプラグインとそのバックエンドで動作する継続サーバによるものです。(複数の画面ではなく)複数の状態を持つ画面は例外なく、このディスパッチャを使ったステートフルアプリケーションコンポーネントとして配備することを推奨します。
階層構造サポートとより少ない設定
ある程度大きなアプリケーションでは、情報へのパスに規律を与えるための命名規約とファイルの階層化は重要な要素です。これまでPiece_Unityでは部分的にしかそのような構造をサポートしていなかったため、ユーザが自前で階層構造をサポートする場合の設定量が多くなっていました。
Piece_Unity 1.4.0で導入されたflowMappingsにより、フロー定義ファイル、アクションクラス、HTMLの階層構造がサポートされました。その結果、Piece_Unity設定ファイルによるアプリケーションワイドの設定量は若干増えたものの、下記の設定が不要になるため全体としての設定量を大幅に少なくすることができるようになりました。
- エントリポイントにおけるフローIDの指定
- エントリポイントにおけるフローに対応するHTMLディレクトリの指定
- フロー定義ファイルにおけるアクションクラスの明示的な指定
フローIDとフロー名
flowMappings導入以前、(フロー定義でなく、フロー実行でもない)フローを一意に特定可能な識別子はフロー名と呼ばれていました。Piece_Unity 1.3.0で導入された新しい設定システムflowMappingsを使う場合、フローを一意に特定可能な識別子はフロー名ではなくエントリポイントのURLになります。また、flowMappingsを使う場合、フロー名はフロー定義ファイルのパスを抽象化したものを示します。いずれの設定システムを使うにせよ、フローを一意に特定可能な識別子の役割は変わらないため、その役割自体を表現する名称としてフローIDが導入されました。以後、フローを一意に特定可能な識別子の名称はフローIDで統一されます。
拡張ポイント
拡張ポイントはありません。
設定ポイント
actionDirectory
(Piece_Unity >= 0.1.0)
概要
アクションクラスが配備されるディレクトリ
デフォルト値
null
説明
アクションクラスはこのディレクトリを起点にPEAR標準コーディング規約のクラス命名規約に従って探索されます。
enableSingleFlowMode
現在この設定ポイントは非推奨となっています。
(Piece_Unity >= 0.1.0)
概要
シングルフローモードを有効にします
デフォルト値
false
説明
このシングルフローモードを有効にすると、アプリケーションを構成するフローの数がひとつに制限されます。現在ではアプリケーションを単一のフローで構成することは推奨されませんので、特に理由がない限りはシングルフローモードを有効にしないでください。
cacheDirectory
(Piece_Unity >= 0.1.0)
概要
フロー定義ファイルのキャッシュの保存先ディレクトリ
デフォルト値
null
説明
リクエスト毎にフロー定義ファイルをパースし、設定オブジェクトに変換するコストを削減するために、フロー定義ファイルは設定オブジェクトの状態でキャッシュされます。この設定ポイントでキャッシュの保存先となるディレクトリを設定します。
flowDefinitions
現在この設定ポイントは非推奨となっています。
(Piece_Unity >= 0.1.0)
概要
フロー定義のリスト
デフォルト値
array()
説明
アプリケーションを構成するフロー定義のリストを記述します。下記はこの設定ポイントの設定例です。1
- name: Dispatcher_Continuation
point:
- name: actionDirectory
type: configuration
value: ../webapp/actions
- name: cacheDirectory
type: configuration
value: ../webapp/cache/flows
- name: flowDefinitions
type: configuration
value:
- name: RegistrationWithNonExclusiveMode
file: ../webapp/config/flows/Registration.yaml
isExclusive: false
- name: RegistrationWithExclusiveMode
file: ../webapp/config/flows/Registration.yaml
isExclusive: true
- name: RegistrationWithExclusiveModeAndAHAH
file: ../webapp/config/flows/Registration.yaml
isExclusive: true
- name: Authentication
file: ../webapp/config/flows/Authentication.yaml
isExclusive: true
- name: ProtectedResource
file: ../webapp/config/flows/ProtectedResource.yaml
isExclusive: false
- name: フロー名(リテラル)
- file: フロー定義ファイルのパス(リテラル)
- isExclusive: 排他モードを有効にします(ブーリアン)
name要素はフローIDとして用いられます。
flowExecutionTicketKey
(Piece_Unity >= 0.1.0)
概要
フロー実行チケットを示すリクエストパラメータのキー
デフォルト値
'_flowExecutionTicket'
説明
この設定ポイントに任意の文字列を設定することで、フロー実行チケットを示すリクエストパラメータのキーを変更することができます。
flowNameKey
現在この設定ポイントは非推奨となっています。
(Piece_Unity >= 0.1.0)
概要
フロー名を示すリクエストパラメータのキー
デフォルト値
'_flow'
説明
この設定ポイントに任意の文字列を設定することで、フロー名を示すリクエストパラメータのキーを変更することができます。
flowName
現在この設定ポイントは非推奨となっています。
(Piece_Unity >= 0.2.0)
概要
フローID
デフォルト値
null
説明
この設定ポイントにflowDefinitionsに設定されたフロー定義のname要素に値を設定することで、該当するフローが実行されます。通常この設定はエントリポイント内で行います。
bindActionsWithFlowExecution
(Piece_Unity >= 0.9.0)
概要
アクション継続を有効にします
デフォルト値
true
説明
アクション内でセッションを意識することのないステートフルなプログラミングを可能にするアクション継続の機能を有効にします。
enableGC
(Piece_Unity >= 1.1.0)
概要
ガベージコレクションを有効にします
デフォルト値
false
説明
この設定ポイントを有効にすることでガベージコレクションが動作します。最終アクセスから一定期間が経過したフロー実行はガベージコレクタによって自動的に削除されます。削除対象のフロー実行を復元しようとすると例外がスローされます。
gcExpirationTime
(Piece_Unity >= 1.1.0)
概要
ガベージコレクタによってフロー実行が期限切れとみなされるまでの秒数
デフォルト値
1440
説明
ガベージコレクタは、最終アクセスからこの設定ポイントに設定された秒数が経過したフロー実行を期限切れとみなし削除対象にします。
useGCFallback
(Piece_Unity >= 1.1.0)
概要
GCフォールバックを使用します
デフォルト値
false
説明
ガベージコレクタによって削除対象となったフロー実行を復元しようとすると例外がスローされます。この設定ポイントを有効にすることで、その例外を無効にし、gcFallbackURLで設定されたURLにリダイレクトさせることができます。
gcFallbackURL
(Piece_Unity >= 1.1.0)
概要
GCフォールバック時のリダイレクト先URL
デフォルト値
null
説明
ガベージコレクタによって削除対象となったフロー実行を復元しようとすると例外がスローされます。useGCFallbackが有効の場合、例外が発生するとこの設定ポイントに設定されたURLにリダイレクトされます。
useFlowMappings
(Piece_Unity >= 1.3.0)
概要
URLをフローにマッピングするための新しい設定システムを使用します
説明
この設定を有効にすることで、URLをフローにマッピングするための新しい設定システムを使用することができます。
flowMappings
(Piece_Unity >= 1.3.0)
概要
URLをフローにマッピングするための新しい設定システムを使用します
デフォルト値
array()
説明
useFlowMappingsが有効の場合に、ステートフルアプリケーションコンポーネントのエントリポイントのURLとそのURLに対応するフロー定義の抽象化された名称のリストを記述します。下記はこの設定ポイントの設定例です。2
- name: Dispatcher_Continuation
point:
- name: actionDirectory
type: configuration
value: ../webapp/actions
- name: cacheDirectory
type: configuration
value: ../webapp/cache/flows
- name: useFlowMappings
type: configuration
value: true
- name: configDirectory
type: configuration
value: ../webapp/config/flows
- name: flowMappings
type: configuration
value:
- url: /entry/list.php
flowName: Entry_List
isExclusive: false
- url: /entry/new.php
flowName: Entry_New
isExclusive: false
- url: /entry/edit.php
flowName: Entry_Edit
isExclusive: false
- url: エントリポイントのURL(リテラル)
- flowName: 抽象化されたフロー定義ファイルのパス(リテラル)
- isExclusive: 排他モードを有効にします(ブーリアン)
url要素の値はフローIDとして用いられます。ユーザリクエストによりアプリケーションが実行されると、継続サーバはフロー定義リストやフロー実行リストに対してエントリポイントのURL($_SERVER['SCRIPT_NAME'])の検索を実行します。このように検索に$_SERVER['SCRIPT_NAME']が使われるため、url要素には、リバースプロキシの使用有無にかかわらずPHPを実行するサーバのURLを設定する必要があります。
url要素にWebサーバによって定義される別名を設定する場合は注意が必要です。例えば、ApacheのDirectoryIndexディレクティブによる"/(スラッシュ)"と"index.php"のマッピング使用時にurl要素に設定するべき値は、"/(スラッシュ)"ではなく"/index.php"です。ApacheのAliasディレクティブによる"/foo.php"と"/file/path/to/bar.php"のマッピング使用時にurl要素に設定するべき値は、"/url/path/to/bar.php"ではなく"/foo.php"です。
flowName要素はフロー定義ファイルのパスを抽象化したもので、この値と設定ポイントconfigDirectory, configExtensionの値を組み合わせることで、実際のフロー定義ファイルへのパスが自動的に決定されます。
設定システムにflowDefinitionsを使った場合、エントリポイントでflowNameを設定する必要がありましたが、flowMappingsではエントリポイントのURLから自動的にフローが決定されるため、そのような設定は不要になりました。
フロー定義ファイルはアクションクラスと同様にconfigDirectoryで設定されたディレクトリを起点にPEAR標準コーディング規約のクラス命名規約に従って探索されます。例えば、上記の設定の場合のフロー定義ファイル、アクションクラスはそれぞれ、../webapp/config/flows/Entry/List.flow, ../webapp/actions/Entry/ListAction.phpとなります。
加えてflowMappingsではフロー定義で設定されたビュー文字列の先頭にflowName要素の値が自動的に付与されます。これによって、フロー定義ファイル、アクションクラス、HTMLに対する階層構造がサポートされます。
configDirectory
(Piece_Unity >= 1.3.0)
概要
フロー定義ファイルが配備されるディレクトリ
デフォルト値
null
説明
useFlowMappingsが有効の場合、フロー定義ファイルはこのディレクトリを起点にPEAR標準コーディング規約のクラス命名規約に従って探索されます。
configExtension
(Piece_Unity >= 1.3.0)
概要
フロー定義ファイルの拡張子
デフォルト値
'.flow'
説明
useFlowMappingsが有効の場合に探索されるフロー定義ファイルの拡張子を設定することができます。
useFullFlowNameAsViewPrefix
(Piece_Unity >= 1.4.0)
概要
ビューのプリフィックスとしての完全なフロー名の使用
デフォルト値
true
説明
この設定ポイントを有効にすることによって、完全なフロー名がビューのプリフィックスとして使用されるようになります。
Piece_Unity 1.3.0/1.3.1の設定との後方互換性を保ちたい場合、この設定ポイントにfalseを設定してください。例えば、"Baz"というビューがあるとすると、異なるフロー名とこの設定ポイントの状態による"Baz"の最終的なビューは下記のようになります。
| flow name | off/1.3.x | on |
| Foo | Baz | Foo_Baz |
| Foo_Bar | Foo_Baz | Foo_Bar_Baz |
ソースコード
Piece/Unity/Plugin/Dispatcher/Continuation.php
