[CakePHP3.10] バリデーション2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public function validationDefault(Validator $validator){
    $validator
        ->integer('id')
        ->allowEmpty('id', 'create');
 
    $validator
        ->scalar("name")
        ->requirePresence("name", "create")
        ->notEmpty("name");
 
    $validator
        ->scalar("mail")
        ->allowEmpty("mail")
        ->email("mail");
 
    $validator
        ->integer("age")
        ->requirePresence("age", "create")
        ->notEmpty("age");
 
    return $validator;
}

### エラーメッセージを個別に表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<p><?=$msg ?></p>
<?=$this->Form->create($entity,
    ['type'=>'post',
    'url'=>['controller'=>'People',
    'action'=>'add']]) ?>
<fieldset class="form">
    NAME: <?=$this->Form->error('People.name') ?>
    <?=$this->Form->text('People.name') ?>
 
    MAIL: <?=$this->Form->error('People.mail') ?>
    <?=$this->Form->text('People.mail') ?>
    AGE: <?=$this->Form->error('People.age') ?>
    <?=$this->Form->text('People.age') ?>
    <?=$this->Form->submit('送信') ?>
</fieldset>
<?=$this->Form->end() ?>

### 日本語のバリデーション

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public function validationDefault(Validator $validator){
    $validator
        ->integer('id', "idは整数で入力下さい。")
        ->allowEmpty('id', 'create');
 
    $validator
        ->scalar("name", "テキストを入力下さい。")
        ->requirePresence("name", "create")
        ->notEmpty("name", "名前は必ず記入してください。");
 
    $validator
        ->scalar("mail", "テキストを入力下さい。")
        ->allowEmpty("mail")
        ->email("mail", false, "メールアドレスを記入してください。");
 
    $validator
        ->integer("age")
        ->requirePresence("age", "create")
        ->notEmpty("age", "必ず値を入力下さい。")
        ->greaterThan('age', -1, "ゼロ以上の値を記入ください。");
 
    return $validator;
}

### バリデーションメソッド
必須項目: requirePresence, notBlank, notEmpty
空白許可: allowEmpty
ASCII: ascii
数字のみ: numeric, integer, naturalNumber, nonNegativeInteger, decimal
文字と数字のみ: alphaNumeric
真偽値のみ許可: boolean
配列のみ: isArray
半角英数字: containsNonAlphaNumeric
等式: equals, notEquals
比較式: lessThan, lessThanOrEquals, greaterThan, greaterThanOrEquals
指定した範囲: range
半角数字が含まれているか: constrainsNonAlphaNumeric
等式: equal, notEquals
比較式: lessThan, lessThanOrEquals, greaterThan, greaterThanOrEquals
文字数: minLength, maxLength, lengthBetween
日時の入力: date, time, dateTime
配列に含まれるか: inList
2つの項目が同じか: sameAs
項目が含まれるか: hasField
メールアドレス: email
クレジットカード番号: creditCard
URLチェック: url
ipアドレス: ip, ipv4, ipv6
uuid: uuid

なるほど、バリデーションは主にmodelのテーブルで行うのか。controllerではないのね。