2011/04/27

php講習 4/27

<午前>
・昨日に引き続き自主課題を使ってsfPageFlowの練習

<午後>
午後のテーマは2つ
(1)掲示板でsfpageflowを使い、お問い合わせフォームを作成
・パラメータの使い方など
フォームでラジオボタン作成
セレクトタグ作成
チェックボックス作成
テキストエリア作成
・これだけでも結構一杯いっぱい。
(2)メールの送信


<午前>
・BBS、front/member_editでニックネームの重複チェック
(カスタムチェックmyNicknameValidator.class.php)
ログイン状態なので、自分のニックネームはあるが、
それ以外と重複しているか、IDで確認。sfpageflowでIDが渡せないトラブル。

<対応>
(1)pageflow.ymlにてパラメータidを受け渡すよう記述追加
 ProcessValidate:
    entry:
     - acceptRequests:
       params:  [id, nickname, mailaddress, password, admin_yn, ]
(2)Initializeアクションにてidをセット
     $this->flow->setData('id', $member->getId());
(3)displayFormテンプレートにてidをパラメータで渡す
<?php echo input_hidden_tag('id', $flow->getData('id')) ?>
(4)カスタムバリデーションにて受け取り、チェック
     if ($member[0]->getId()==$request->getParameter('id')) {
・判ってしまえば、昨日やったことの復習だった。


<午後>
・まず、contentテーブル作成
create文は、メールで送付されています。
もし、contentテーブルが既にある人は、一度テーブルをdropして下さい。
テーブルが出来たら、スキーマ、モデルも作成しておく。
symfony ccも忘れずに。

・お問い合わせ入力フォームの作成
symfony propel-generate-create front contact_add Contact

作成したら、メッセージを日本語にするなど、レイアウト調整。

・昨日の復習、sfpageflowでのパラメータの渡し方の解説
(重要な(混乱しやすい)ことは繰り返し説明してくれるので、ここは重要と認識)

・sfPageFlowでは、データはFlowオブジェクトに持つ。(デジャヴ?)
(Flowオブジェクトを経由して受け渡し)
参照するときは、
アクションは、$this->flow
テンプレートは、$flow
(pageflow.ymlにてパラメータの追加も忘れずに)

・通常のsymfonyのアクションで使う下記の記述は使えない。
sfPageFlowでは、必ずフローオブジェクトを使用する。
$this->name

・チェックボックスの記述は複雑だが、例のとおり書くと覚えておく。
分からない人はプログラムを読んで理解して。
<?php if ($sf_request->haserror('kind')) :?>class="errortd"<?php endif;?>>
<?php echo checkbox_tag('kind[]', 1,in_array(1, $flow->getData('kind'))); ?>資料請求<br>
<?php echo checkbox_tag('kind[]', 2,in_array(2, $flow->getData('kind'))); ?>商品について<br>
<?php echo form_error('kind'); ?>
・チェックボックスデータのDB保存
    $contact->setKind($this->getRequestParameter('kind'));
    kind[]は配列なので、そのままDBには入らないため、文字列にする。
    $contact->setKind(implode(',',$this->getRequestParameter('kind')));
・ちなみにこちらは逆の処理(DBから呼び出すとき?)
explode() - 文字列を文字列により分割する、文字列の配列を返します。

・お問い合わせフォームはメールで送付されているので、詳細はそちらを
確認して下さい。


(2)メール送信処理
・その1:問い合わせデータ保存のタイミングで、メール送信
// $bodyにメール本文
$body = "以下の内容でお問い合わせいただきました。\n\n" ;
$body .= "お名前".$contact->getName();

mb_internal_encoding("utf-8");
mb_language("japanese") ;
mb_send_mail('tmp@localhost',
"subject:test",$message_for_user,$body,
"From:".mb_encode_mimeheader('担当者'). "<tmp@localhost>") ;

・その2:本文を別に作成
・使うための記述
        $this->setFlash('contact', $contact) ;
        $message_for_user =
        $this->getPresentationFor('mail','sendUserAfterContact') ;
・作るための記述
(1)mailモジュール、sendUserAfterContactアクションを作成
(こちらは素のsymfonyです、混乱しないように)
(2)アクション
$this->contact = $this->getFlash('contact') ;
$this->setFlash('contact', null) ;
return sfView::SUCCESS;
(3)テンプレート
お問い合わせありがとうございます。
以下の内容でお問い合わせを承りました。
お名前:<?php echo $contact->getName();?>
<?php $pref = sfConfig::get('sf_pref');?>
都道府県: <?php echo $pref[$contact->getPref()];?>

・メールのあて先は、自分のメールアドレスでテスト。
・残りの時間は(明日も)、自主課題への反映で練習。

0 件のコメント:

コメントを投稿