top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_1086

確認画面の追加:symfony・Doctrineフォームの改造。確認画面を自己流で ・・・ 【symphonyで、創るぞ】

 2009-09-14
 symfonyでのサイト開発を続けている。
 フォームにいろいろと改造したので、記録しておこう。
 方法は、本来の symfony の作法ではないかもしれない。
 いづれきちんと習得することを忘れないで
 (ほんと、かよ)
 今は、実行あるのみ。記録です。

 まずは、お決まりの
 ・確認画面( confirm form ) の追加
  確認画面( confirm form )


  追記に ▼


 ※今までのご参考

FC2ブログランキング にほんブログ村 IT技術ブログ Webサイト構築へ ブログ王ランキング 人気ブログランキング 人気ホームページランキングへ


more

************************************************
◎ symfony・Doctrineフォーム
   「確認画面の追加」:symphonyで、創るぞ

************************************************


 ■まずは、情報収集。
  いろいろあるな。
  ・確認画面 の追加 に関する記事。
  いくつかの有用な記事に感謝。


  見つけたのは・・・

symfony確認画面を作る
symfony確認画面を作る [記事ポイント]
 随分前の記事なんだけど、
 記事中の
 「ここで追加した画面をポチポチして
  ハイ終わりというのはNG。
  追加した分は必ずテストをし、
  問題が起こらないかどうかを
  チェックする。
  そうすることでバグの少ない
  システムになっていく。」

 というのは、効いたなぁ。




 こちらはまだ私は習得していないクラスを利用してて

sfObjectRouteで確認画面を作ってみる
sfObjectRouteで確認画面を作ってみる [記事ポイント]
 ルーティング設定を駆使して
 実現されてますね。

 ・・・勉強になります。



 同じように、ジェネレータに組み込まれようとされていたり

確認画面を作る(symfonyを使ってみる3)
確認画面を作る(symfonyを使ってみる3) [記事ポイント]
 アドミンジェネレータ
 ・確認画面を追加した
  拡張版ジェネレータクラス
  (sfPropelAdminGeneratorPlus)と
  確認画面を含むテーマ(default-plus)を提供

 ・・・なんだけど、
    使ってるのが、Propel なんだなぁ。


 ・・・それなりに刺激をいただきました。

 方法を見つけるための格闘記事(ちょっと前だけど)


Symfonyと格闘・・・
Symfonyと格闘・・・ [記事ポイント]
 HTML_QuickFormfreezeをまねた
 内部にフラグを持つ派生クラスを
 アレコレ

 ・・・なるほどねぇ。


 ・・・刺激受けます。

 ・・・で、どうしたんだ(お前は)、と。


 はい。私は、
 symfonyまだまだ見習い。


 より理解するために、これら記事を参考に
 泥臭く、actiontemplate でやろうか、と。
 まったくの自己流で、参考にならないかも
 しれませんが、いつか、
 ・懐かしき、若気の至り
  (若くはないですが)
 と思える記事にしようと。(はは)

 ■actionクラスの改造


  □最初の入力画面のテンプレートにおいて
   まず、actionを呼び出す、
   ・form action の部分を改造。
<form id="contact_form" name="contact_form" autocomplete="off" enctype="multipart/form-data" method="post" action="<?php echo url_for('contact/'.($action=='confirm' ? 'create' : 'confirm')) ?>" <?php $form->isMultipart() and print 'enctype="multipart/form-data" ' ?>>
   最初は、
    ・アクションとして "confirm" が呼ばれるようにして、
   確認画面のときは、
    ・"create" が呼ばれるように。

 そうです。とにかく似たようなソースファイル
 たくさん創りたくない私は、同じ _form.php で
 切り分けようかと。
 (はい、上記の先人の方がおっしゃる
  あまり、スマートではない、方法ですね。はは)


  □確認画面として呼び出す


   アクションの作成
  (プロジェクト名)/apps/frontend/modules/(アプリ名)/actions/actions.class.php
   に、
  public function executeConfirm(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod('post'));
$this->form = new ContactForm();
if ($request->isMethod('post'))
{
$this->values = $request->getParameter('contact');
$this->action = "confirm";
$this->form->bind($request->getParameter('contact'));
if ($this->form->isValid())
{
$this->setTemplate('confirm');
}else{
$this->setTemplate('new');
}
}
}
   実は、ここ結構とまどったんですね。
  【留意メモ】
   ・フォームからやってくる値 なんだけど
    最初は、
  ・・・・・
if ($this->form->isValid())
{
$this->values = http_build_query($this->form->getValues())
$this->setTemplate('confirm');
}else{
$this->setTemplate('new');
}
・・・・・
 ってやってたんだけど、これでは、
  このモジュールのモデル定義している
  (プロジェクト名)/lib/form/doctrine/ContactForm.class.php で、
    ・$this->setValidators 設定している値しか
     取れないんだよねぇ。なんか勘違いなのかな。
$this->validatorSchema->setOption('allow_extra_fields', true);
 を指定してるんだけどね。
    (もちろんこれ指定していないと エラー出るけど)
    ・isValid() の後だから当然なんだろうけど、結局
     その前で、
$this->values = $request->getParameter('contact');
 として 必要な値を変数に入れておいて。
$this->action = "confirm";
 は、フラグね。

 ■確認画面のテンプレート


  □新しく作成
  (プロジェクト名)/apps/frontend/modules/(アプリ名)/templates/confirmSuccess.php
   の中で、
<?php include_partial('form', array('form' => $form, 'values' => $values, 'action' => $action)) ?>
   と、値を受け渡して、共有フォームを呼び出す。

 ■フォームの(部分)テンプレート


  □入力用と共用
  (プロジェクト名)/apps/frontend/modules/(アプリ名)/templates/_form.php
   の中で、(泥臭く)
<? if($action=='confirm'){ ?>
 ・・・・・
<? }else{ ?>
 ・・・・・
<? } ?>
 と振り分け処理。

  で、


 ■フォームのヘルパー利用して


<?php use_helper('Object') ?>
 を、_form.php の最初に書き込み
  □入力の時は( if($action!='confirm'){ )
   (今まで通り)
<?php echo $values['title_contact']  ?>
 などど、タグ出力。
  □確認の時は( if($action=='confirm'){ )
   (泥臭く)
<?php echo $values['title_contact'] ?><?php echo input_hidden_tag('contact[title_contact]', $values['title_contact']) ?>
 などど、出力。

  一応動いてるけど、確かにスマートじゃないよねぇ。


 ちなみに、戻って修正するときは
 ・ブラウザの戻るボタンや javascriptのhistory.go(-1)
  (いまどき、使う人いないだろうけど) では、値が
  ちゃんと再生されないので、(テキストエリアなど)


 ■戻るアクション

<script type="text/javascript"><!--
function goBack(){
var form = this.document.forms['contact_form'];
form.action = "/contact"; form.submit();
}
// --></script>
 という Javascript を用意して呼び出す、と。


 とりあえずこれで、確認画面はできた。
 後は、教えに従い、丁寧にテストしよう・・・

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/1086-42a4e8db
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。