Skip to content

Latest commit

 

History

History
83 lines (50 loc) · 6.92 KB

page.md

File metadata and controls

83 lines (50 loc) · 6.92 KB

導入

BEARはページ設計指向のフレームワークです。フロントコントローラを持たず、画面単位でページクラスを定義しページコントローラとして機能します。

URLをパラメータとしてアプリケーションとして振る舞う一般のMVCフレームワークと対照的に、htdocs/におかれたページが独立した(スタティックHTMLと同様に)リソースとして表現されます。BEARではURLの構造を規定するのはフレームワークではなく、アプリケーション設計者です。

Note:

アプリケーション要求によってフロントコントローラー設置のメリットが多きい/必要だと認めた時にはアプリケーション作成のフロントコントローラーを設置します。ページをスクリプトとして実行するとことと(include)ページクラスを読み込む(BEAR_Main::include)事が可能です。ページコントローラがフロントコントローラーに対応するコストは高くないとしょう。

Note:

ページはコントローラであると同時にリソースとしても振る舞うこともできます。※引き数が渡されその出力HTMLまたはページにsetされたリソースが返り値になります。

詳細

ページはユーザーからみてサービスである一方、リソースを操作するクライアントでもあります。一般にページクラスの中身はリソースを操作するだけのものになるでしょう。ページイベント(イベントなし、クリック、フォームアクション)に応じたリソース操作を記述します。

ページ内でリソースに対して”操作”するだけです、リソースのインスタンスの生成、管理、キャッシュなどはページ内での仕事ではありません。ページクラスにインジェクトするリソースブラウザクラス(BEAR_Resource)を利用します。

ページをpage://のURLスキーマとしてページリソースとして、webブラウザ以外のクライアントから扱うこともできます。そのときのページから、リソースのアクセスはリソースのレイヤリングとなります。そのときpageクラスの出力ハンドラによるページのHTML化は無視され、変数やシリアライズされたテキストフォーマットとしてweb以外のクライアントに返されます。

定義されたPageクラスはMainクラスによりコールされます。ページクラスもBEARの別のクラス同様に、共通コンスラクタ、インジェクタの後に、ページのイベントに基づいてMainクラスからメソッドがコールされます。

クリックという仕組みがあり、特定のリンクとページのメソッドを紐づけることができます。同じURL=ページクラスで機能や画面を変えるときに利用します。例えば記事ページ記事リソースをreadし表示しているが、"delete"イベントが発生すると delete操作が行われ、”削除しました"画面が出るといった具合です。またリダイレクト時も仮想的なリンクを"クリック"してページ移動できます。

onで始まるページクラスのメソッド(ページハンドラと呼びます)がBEARからコールされ実行されます。

主要ハンドラ

メソッド名 動作
onInject() インジェクションハンドラ
onInit(array $args) 初期化ハンドラ
onOutput() 出力ハンドラ
onAction(array $submit) アクションハンドラ
onClick() アクティブリンクハンドラ
onException(Exception $e) 例外ハンドラ

基本はonInject()。onInit()、onOutput()がコールされページが出力されます。これにクリック、認証、フォームサブミットなどが加わるとそれぞれのハンドラがコールされます。

ページメソッド

ページクラスが持つメソッドは多くありません。主要なものはこれだけです。

メソッド 動作
set($key, $values) ページにリソースや変数をセットする
display($tpl) セットされたものにページテンプレートを適用してHTML表示する

ページクラスとメインクラス

ページクラス名にはURLをクラス名にして頭にPage_をつけたものを指定します。URLが/user/entyry/index.phpならPage_User_Entry_Indexです。イベント定義したPageクラスをBEAR_Mainを継承したApp_Mainクラスで実行(run)します。

主要メソッド

インジェクションハンドラ onInject()

ページが必要とする引数やオブジェクトをこのハンドラで準備します。BEAR_Mainのオプションでインジェクトハンドラを切り替える事が可能です。

初期化ハンドラ onInit(array $args)

インジェクションハンドラで用意(注入)された変数やオブジェクトを使ってページ出力に必要な変数を準備します。 外部リソースを読み取り、リソースをset()メソッドでセットします。

出力ハンドラ onOutput()

onInit()ハンドラでsetされた値やリソースを出力します。 display()メソッドでSmartyを使用したHTMLページ出力になります。output('json')やoutput('excel')で出力するとそれぞれAJAX用JSONサービス、エクセルファイルダウンロードとなります。

※initハンドラでは出力はできません。echoや不用意なincludeで出力されたものはデバックモードでは破線に囲まれ開発確認用に出力されますが、ライブモードでは全てキャンセルされます。

フォームアクションハンドラ onAction(array $submit)

フォームからsubmitされた値ががフォームバリデーションOKの場合のみコールされます。$submitで渡された値をつかってリソース操作(create, update, delete)をします。

クリックハンドラ onClick(array $args)

ページに特定のイベントのハンドラを記述します。例えば記事一覧リソースを表示しているページがあったとして、特定の記事の「消去」リンクをクリックしたとき等にコールされます。

例外ハンドラ onException(Exception $e)

通常、リソースリクエストでリソース側で例外が発生しても(例えばDB接続失敗)ページには空のリソースオブジェクトが返るだけですが、その例外処理をページでしたい場合(ユーザー登録失敗など)にはこのハンドラを用意することで対処できます。 受け取った例外をハンドラ内でthrowして再度catchして例外を特定します。