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 件のコメント:
コメントを投稿