PHPでdispatchを実装したい。。。

現在、EzoGPのでopenBusinessSuiteというのを実装している。Myznalaをベースにしているのだが、我ながら「使いにくい」ので、Myznalaもなおしちゃおうと思っている(アルファとはいえ、リリースしたことを反省)。

Myznalaをやっていたときから気になっていたのが、dispatchをどうしようか、ということ。
元々がJava屋でStruts世代なので、DispatchActionなんかに慣れ親しんでいる身。Myznalaはフレームとかつかわないで、簡易に実装できる道具にしたい、というのもあって、あんまりツールとか使わないで書きたいな、と思っていた。

dispachingは、下の図のように、1つの画面から複数のターゲット(action)にsubmitしたい場合に行わなくちゃならないのだが、どうも納得したやり方が見つからない。

ボタンに応じた処理系はプログラムとして分けたかったので、Myznalaではdispatch用のPHPを用意してPOST、そして、押されたボタンに応じて、各々の処理系のPHPプログラムをincludeしていた。header("location:...")でリダイレクトすると、リクエストパラメータがなくなっちゃう。
だが、これだと、アドレスバーにdispatch用のPHPプログラムのURLが残ってしまう。そうすると、enterを押された場合に、振り分けできないという事態に陥ってしまう。

ということで悩みに悩んだ結果、古典的な方法を採用して、javascriptでsubmitすることにした(果たしてそれでいいんだろうか、という疑念はあるのだけど。。。)。

以下のコードは、YUI2.8.xを使って書いた。(dom-event)
まずは、部品としてで使えるように、オブジェクトを1つ。

var MySyncSubmit = function() {
	var	Dom 	= YAHOO.util.Dom;	
	var	Event 	= YAHOO.util.Event;	

	this.submit = function(_config) {
 		var _submitForm	= _config.submitForm;
 		var _submitURL	= _config.submitURL;
 		var _method	= _config.method;
 		
 		if(Dom.get(_submitForm) != null){
			Dom.get(_submitForm).action = _submitURL;
			Dom.get(_submitForm).method = _method;
			Dom.get(_submitForm).submit();
		}
	 }

	return this;
};


画面に2つボタン(「登録」と「一覧に戻る」)があるとして、以下は、上のオブジェクトを、ボタンのclickイベントのハンドラに割りつける部分。

// buttonのonclickにsubscribe.
YAHOO.util.Event.onDOMReady(
	function(){
		var sObj = new MySyncSubmit();
	        // 「登録ボタン」が押されたとき
		YAHOO.util.Event.on('egp-my-entry-button', 'click',
			function(){
				var configObj ={
					submitForm	: "form1",
					submitURL	: "shiiresakiEntry.php",
					method		: "POST"
				};
				sObj.submit(configObj);
			}, 
		sObj);
	
	    // 「一覧へ戻るボタン」が押されたとき
		YAHOO.util.Event.on('egp-my-back-button', 'click',
			function(){
				var configObj ={
					submitForm	: "form1",
					submitURL	: "shiiresakiList.php",
					method		: "POST"
				};
				sObj.submit(configObj);
			}, 
		sObj);
	},
	this,
	true
);


これをしこめば、dispatchはいらなくなる。こんなやり方でいいのかな、という疑念は残るが、覚書ということで。