画面遷移メモ

http://tanaka.x0.com/blog/archives/2005/05/validation.html
http://d.hatena.ne.jp/hawkring/20050519/1116509249


今まで自分が書いていたプログラムでは画面遷移で迷うことがなかった。
Controllerをその都度書いていたから。


どういう流れで動くのかって疑問に思えばControllerを見れば一発で分かる。
で、今回もControllerは自分で書くようにしようかと思ってたんだけど・・。

Controller自動化が主流のようなのでここは自動化にしたい。
それでViewで悩む。


しかしControllerを自分で書いてしまえばViewで悩むこともなくなるわけで・・そうすればさくっと先に進めるのに自動化にした方が全体的には楽というこのじれったさ。



ふと思いついた。

今までコントローラを書いていたわけで、その処理は今回はどこに行ったかというと設定ファイルだ。
要するに

[view]
success = UserInformationView
error   = UserLoginView

として、この右辺はテンプレートじゃなくてアクションにすればどうだろう。
HTMLのテンプレートファイルのみ指定するのは不可の方向で。
もちろんUserInformationViewに対するアクションクラスが無ければ、UserInformationView.htmlを単純に表示するのみで。

うん。これで先に進みそう。



あとアクションチェーンの途中やフィルタでこれが出てきた場合は・・。
どうしよう。


例えばアクションはUserInformationViewだけれどもログインのセッションが切れていてフィルタでUserLoginViewに飛ばしたい場合。

[view]セクションが存在する場合は強制的に処理終了で大丈夫かな。
この場合だとフィルタの設定に

[view]
error = UserLoginView

とだけ書いておけば、エラー以外はそのまま処理続行で。


エラーメッセージなんかを受け渡したい場合はRequestクラスに適当に放り込んでおくということで。


このときUserLoginViewはフィルタによって飛ばされてきたことを知りたい・・・依存関係が増えてしまうのか。



以下、ちょっとまとまらないけど頭の中を整理するためのメモ。



ログインのチェッククラスをLoginCheckとする。
ログイン実行関数をexecLoginとする。
フィルタの関数をactionFilterとする。


execLogin関数、actionFilter関数、または他のクラスやフィルタからUserLoginViewアクションに遷移する可能性があるとする。


フィルタからの遷移の場合、UserLoginViewクラスに関数が存在すればexecute_LoginCheck_actionFilter()、execute_LoginCheck()、execute()の優先順位でLoginCheck->actionFilterからの遷移を処理する。


依存関係を増やしたくない場合はexecute()のみ書いておいて、特定の画面から遷移した場合のみ処理を分けたいときは(前の画面のデータを取ってくる等)execute_の後に遷移前のクラスを付けた関数を作る。


まどろっこしいような気もするけど、バグが減る気がする(気がするだけ・・


将来的にexecute()の中を変更する時でも

function execute_LoginCheck(){
    $this->execute();
}

っていう記述があれば(なくても動く)「あぁ、変更する前にLoginCheckクラスを見てみようか」ってなる(?)


こういうのは仕様書とか別のものに書くべき・・?
取り敢えずViewを決めなきゃ画面が見えないから・・Viewだけ決めて進んでないところを動かしてみよう。