[PHP-users 25705] Re: mojaviでのサイト構築

町嘉昭 yoshi @ mail.crosswave.co.jp
2005年 5月 31日 (火) 14:37:48 JST


rodyです。はじめまして。

「Mojavi2 + HTML_Quickform + Smarty」の組み合わせで
アプリをいくつか作った経験がありますが、
フォームでの入力値の保存はできますよ。
また、入力値の検証に関しても、Quickformの機能をそのまま使うことができます。

私の場合、FilterでQuickFormのオブジェクトを生成して、
requestクラスのsetAttributeByRefメソッドを使って保持。
生成したオブジェクトをrequestクラスのgetAttributeメソッドを使って
Actionクラス内で参照します。


■QuickFormFilterの処理例

<?php

class QuickFormFilter extends Filter
{
    function execute(&$filterChain, &$controller, &$request, &$user)
    {
        $loaded = $request->getAttribute('QuickFormFilter');

        if ($loaded == NULL)
        {
            $request->setAttribute('QuickFormFilter', TRUE);

            $module = $controller->getCurrentModule();
            $action = $controller->getCurrentAction();

            $page_renderer =& $request->getAttribute('SmartyRenderer');
            $form_builder  =& new HTML_QuickForm($action, 'POST', '?module=' . $module . '&action='
. $action);
            $form_renderer =& new HTML_QuickForm_Renderer_ArraySmarty($page_renderer->engine);

            $request->setAttributeByRef('QuickFormBuilder', $form_builder);
            $request->setAttributeByRef('QuickFormRenderer', $form_renderer);

            $filterChain->execute($controller, $request, $user);
            $request->removeAttribute('QuickFormFilter');
        }
        else
        {
            $filterChain->execute($controller, $request, $user);
        }
    }
}
?>

■Actionクラス例

<?php
class FormAction extends Action
{
    function initialize (&$controller, &$request, &$user)
    {
	$form =& $request->getAttribute('QuickFormBuilder');

    //$form->addElement()を実行して入力フォームを構築
		
        return true;
    }

    function getDefaultView (&$controller, &$request, &$user)
    {
	return VIEW_INPUT;
    }
	
    function execute (&$controller, &$request, &$user)
    {
	$form =& $request->getAttribute('QuickFormBuilder');
		
	// $form->getElementValue()を使って入力値を取得して処理

	return VIEW_SUCCESS;
    }

    function getRequestMethods ()
    {
        return REQ_POST;
    }
	
    function validate (&$controller, &$request, &$user)
    {
	$form =& $request->getAttribute('QuickFormBuilder');
	
	//QuickFormの入力値検証処理をそのまま利用できます
        return $form->validate();
    }
}
?>

■Viewクラス例

<?php
class FormView extends View
{
	function & execute (&$controller, &$request, &$user)
	{		
		$renderer =& $request->getAttribute('SmartyRenderer');
		$renderer->setTemplate('form_input.html');

		$form =& $request->getAttribute('QuickFormBuilder');
		$qr =& $request->getAttribute('QuickFormRenderer');
		$form->accept($qr);
		$renderer->setAttribute('form',$qr->toArray());	
		
		return $renderer;
	}
}
?>

■テンプレートの例

<html>
<head>
<body>
{$form.(フィールド名1).html}
{$form.(フィールド名2).html}
</body>
</html>


また、入力 → 確認 → 登録に関しても、
VIEW_INPUT → VIEW_ALERT → VIEW_SUCCESS
みたいにしてVIEWを変えています。

説明べたですが、参考になりましたでしょうか。
ちなみに、HTML_Quickform_Controllerは使ったことありません。。


shima tetuo wrote:
> tetuoです。
> 
> 今まではHTML_Quickform_Controller + HTML_Quickform + Smarty!でかなり楽に
> サイトが作れると思っていたのですが、最近Mojavi2を使い出しました。でも、
> 今のところMojavi2と他のライブラリとの組み合わせなどで、このままMojaviに
> していくべきなのか、HTML_Quickform_Controllerの方が実は楽なのか悩んでい
> ます。
> ※深くまで見ていないので、間違っている所もあるかも知れません。
> 
> HTML_Quickform_Controller + HTML_Quickform + Smarty!
>   対
> Mojavi2 + HTML_Quickform + Smarty!
> 
> --------------------------
> HTML_Quickform_Controller
> --------------------------
> 良いと思う点
> -フォーム入力値が送信時に保存される
> -HTML_Quickformでのフォーム要素構成、Viewでの表示に一貫性があり、エラー
> 処理、エラー表示がスムーズにコーディングできる
> -submitボタンそれぞれに、アクションの割り振りが容易に出来る
> 
> 不満に思う点
> -連続したページ遷移がやっかいになりがち
> 
> --------------------------
> Mojavi2
> --------------------------
> 良いと思う点
> -MVCがしっかりしており、コーディング量が抑えられる
> -config.phpのNotFoundや、Unavailable設定などは、とても便利
> -モジュール単位で構成できて、ディレクトリ構成がとてもすっきりする
> 
> 不満に思う点
> -フォームでの入力値の保存は無い?
> -エラー処理で、HTML_Quickformは使わないとするとValidatorがあるが、これを
> 使用すると、templateのフォームを書く際、エラー表示部分など含め、コーディ
> ング時間が比較的増える
> -submitボタンそれぞれにアクションの割り振りが容易に出来ない?
> -HTML_Quickformは使わないとすると入力 → 確認 → 登録は独自に作成する必要がある?
> -action view templateと、1つのページを作る為に色々ファイルが必要(管理面で手間?)
> -無理してでもValidatorを使う理由はある?(HTML_Quickformがあるので)
> 
> 
> 基本的にはコーディング量が抑えられて、
> 
>  MVCの区切りが明確
>  入力 → 確認 → 登録が容易に出来る
>  フォームのSubmitボタン毎でのアクションの振り分けが出来る
> 
> があれば良いかなと思いますが、Mojavi2では
> 
>  入力 → 確認 → 登録が容易に出来る
>  フォームのSubmitボタン毎でのアクションの振り分けが出来る
> 
> の辺りを自前で実装しないといけない?のかなと思っています。
> 実際にやって、うまく動いているのですが、自前で実装する以外に何か一般的に
> もっと良い打開策がないものかと思っています。
> 
> 
> Mojaviの資料自体、あまりネットにないと思いますが、「自分はこうしてる」
> 「Mojaviはこう使うと楽」的な情報がありましたら参考にしたいです。
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
> 
> 



PHP-users メーリングリストの案内