[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 メーリングリストの案内