1時間目
☆エラーチェック
frontにmember_addモジュール作成。
以下記述
<?php use_helper('Validation');?> ←Validationヘルパー呼び出し <form action="/backend/member_add/confirm" method="POST"> 名前:<input type="text"name="name" value="<?php echo $sf_params->get('name')?>"><br> <?php echo form_error('name');?> メールアドレス:<input type="text"name="mail" size="30" value="<?php echo $sf_params->get('mail')?>"> <?php echo form_error('mail');?> <br> <input type="submit" name="send" value="確認"> </form>
1.値を渡す先のaction名.ymlをvalidateディレクトリに置く。
confrim.yml作成
2.validate/action名.ymlにエラーチェックのルールを記述する。
confirm.ymlに以下記述
fields: name: required: msg: ニックネームを入力してください。 mail: required: msg: メールアドレスを入力してください。 sfEmailValidator: email_error: メールアドレスを正しく入力してください。3.エラーだった場合の遷移先をactionで定義する。
handleErroraction名で作成する。
public function handleErrorConfirm() { $this->forward('member_add' , 'input'); }
2時間目
4.エラーメッセージを表示させる。
fields: name: required: msg: ニックネームを入力してください。 mail: required: msg: メールアドレスを入力してください。
出たけどこの謎矢印はSymfonyが出してるのか・・・。
configのsettings.ymlを以下修正。ALLの#もあったら取ろう。
# validation_error_prefix: ' ↓ ' # validation_error_suffix: ' ↓'の#と↓ 、 ↓を消す。
片方だけ入力すると、入力した値は消えずに残っている。SymfonySUGEEEEE。
仕組みはhandelErrorConfirmでforwordが値を内部的に保持してくれている。
それを$sf_paramsが受け取っているから表示できる。
☆応用 if文でエラーチェック。
<?php if($sf_request->haserror('name')):?> <div style="background-color:#ff0000;"> <?php echo form_error('name');?> </div> <?php endif;?>
strictは正規表現のvalidate。ただ、strictをつけると携帯のメールがはじかれる?
数字のvalidater
sfNumberValidator: num_error: 整数を入力してください min: 0 min_error: 値は最小0でなければなりません。 max: 100 max_error: 値は100以下でなければなりません。
3時間目
☆比較Validater
4時間目
☆自作Validator
member_addのconfirm.ymlのnameのすぐ後に以下追加 myNameValidator: name_error: そのニックネームはすでに使われています。
module直下のlibディレクトリに作成。 myname(ymlと同じ)validator.class.php その中身 <?php class myNameValidator extends sfValidator { public function execute(&$value, &$error) { //actionではないので呼び出し処理が必要 $request = sfContext::getInstance()->getRequest(); $user = $this->getContext()->getUser; $c = new Criteria(); $c ->add (MemberPeer::NICKNAME, $request->getParameter('name')); $count = MemberPeer::doCount($c); if ($count !=0){ $error ='このニックネームはすでに使用されています。'; return false; } return true; } } ?>
おまけ
出力したエラーメッセージのクラスは以下 <div style="" class="form_error" id="error_for_mail"> メールアドレスを入力してください。 </div> default→configのsettings.ymlのValidate箇所で変更可能。 main.cssでCSS設定もおk。
以降は自習。validate処理追加していこう。とな。
なんとか自前のmember_addに入れられた・・・はふー。
0 件のコメント:
コメントを投稿