2011年4月25日月曜日

4/25覚書

色々あってかなり間が空いた。その色々は主に金銭面だが。

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に入れられた・・・はふー。