バリデーションルール

Posted by muchag | CakePHP 3.x | 2018-04-11 (水) 20:55:47


公式:データの検証

【環境】
CakePHP: 3.5.11
php: 7.1.5
デフォルト

Bake コマンドによる Model 生成時に
Table クラスに下記のようなデフォルトバリデーションルールが自動生成される。


/**
 * Default validation rules.
 *
 * @param \Cake\Validation\Validator $validator Validator instance.
 * @return \Cake\Validation\Validator
 */
public function validationDefault(Validator $validator)
{
    $validator
        ->integer('id')
        ->allowEmpty('id', 'create');

    $validator
        ->email('email')
        ->allowEmpty('email');

    $validator
        ->scalar('password')
        ->maxLength('password', 255)
        ->requirePresence('password', 'create')
        ->notEmpty('password');

    $validator
        ->scalar('role')
        ->maxLength('role', 255)
        ->allowEmpty('role');

    return $validator;
}
追加

バリデーションルールを追加したい場合は
Model のカスタマイズで書いたように
拡張 Table クラスに下記のように記述すればよい?
未試行。


public function validationDefault(Validator $validator)
{
    $validator = parent::validationDefault($validator);

    // 追加したい処理

    return $validator;
}
変更1

公式:データの検証 異なるバリデーションセットの使用
に書かれている手法は

  1. Table クラス内に validationXxxx() というメソッドを新設
  2. newEntity() 時に指定
新設

class ArticlesTable extends Table
{
    public function validationUpdate($validator)
    {
        $validator
            ->add('title', 'notEmpty', [
                'rule' => 'notEmpty',
                'message' => __('タイトルを設定してください'),
            ])
            ->add('body', 'notEmpty', [
                'rule' => 'notEmpty',
                'message' => __('本文は必須です')
            ]);
        return $validator;
    }
}
指定

Xxxx 部分を xxxx にて指定。


$article = $articles->newEntity(
    $this->request->getData(),
    ['validate' => 'update']
);
変更2

以前調べて参考サイトからいただいてきたと思われる手法。
結局は1と同じことをしているけど、名前指定ではなく、バリデータ自体を渡している感じ?

  1. Table クラス内に validationXxxx() というメソッドを新設
  2. バリデータを取得
  3. newEntity() 時に指定
新設

1と同様。

取得

$validator = $this->Articles->validationUpdate(new Validator());
指定

$entity = $this->Articles->patchEntity($entity, $this->request->getData(), ['validate' => $validator]);
CakePHP 3.x | 2018-04-11 (水) 20:55:47 |

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment