2011/04/25

symfony エラーチェック(バリデーション)

php講習 4/25
本日のテーマ
・エラーチェック(バリデーション)

(1)値を渡す先のアクション名.ymlをvalidateディレクトリに置く
input -> confirmなので、confirm.ymlをmember_addモジュールの
validateディレクトリに置く

(2)ymlファイルにチェックのルールを記述
fields:
  nickname:
    required:
      msg: ニックネームを入力してください。

(3)エラーだった場合の遷移先をアクション定義する。
handleErrorアクション名
  public function handleErrorConfirm()
  {
      $this->forward('member_add','input');
  }

(4)tmpファイル(input)にエラーの表示を設定する。
バリデーションヘルパ、エラーメッセージの表示
<?php use_helper('Validation');?>
<?php if ($sf_request->haserror('nickname')):?>
<div style="background-color: #ff8888;">
<?php echo form_error('nickname')?>
</div>
<?php endif;?>

(5)エラーメッセージのデフォルト表示変更(エラーメッセージ矢印の設定を消す)
front/config/setting.yml
    validation_error_prefix:    ' '
    validation_error_suffix:    ' '
・記述が終わったら、symfony cc

(6)エラーとなる値を入れ、エラーメッセージの表示と、
入力値が残ることを確認する。


リダイレクト:post(get)された値は引き継がない
フォワード:post(get)された値を引き継ぐ
・handleErrorConfirmでパラメータが引き継がれている。
・inputテンプレートで受け取っているので表示されている。
$sf_params->get('nickname')

<その他のチェック>
・文字列のバリデーター
    sfStringValidator:
     min:          2
     min_error:    少なくとも2文字入力してください
・メールアドレス
    sfEmailValidator:
     email_error:  このメールアドレスは無効です

・数字のチェック
・チェックの項目は覚えなくてもいい。

<練習>
・掲示板で、ニックネームと投稿に必須入力のチェックを追加

・symfonyで用意されているチェックで足りないのは、DBにある情報とのチェック
ニックネームが重複していないか?

・カスタムバリデータ
    myNicknameValidator:
      nickname_error: そのニックネームは既に使われています。
class myNicknameValidator extends sfValidator作成

・動作確認

<追加の情報>
・バリデートでエラーを呼ぶとき、吐き出されるタグがクラスform_error
setting.ymlまたは、cssのクラス指定でスタイルを変更可能
<div id="error_for_nickname" class="form_error" style="">
このニックネームは既に利用されています </div>

・残りの時間は、課題にバリデートを適用
少なくとも、1つ、カスタムバリデータを作る

・ログインユーザの自分の情報を変更するとき、ニックネームを変更しなければ
DBにはニックネームがあるので、必ず1以上が返る。
(処理作成中)

0 件のコメント:

コメントを投稿