DEVELOPERS BLOGデベロッパーズブログ

  1. HOME > 
  2. 加藤 正人のデベロッパーズブログ > 
  3. CakePHP のバリデーション時に状況に応じてバリデーションルールを変更する

加藤 正人のデベロッパーズブログ

加藤 正人

氏名
加藤 正人
役職
多分SE
血液型
秘密
出没
美味しいもののあるところ
特色
タヒチ大好き。ちょいメタボ。

PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)

2016/01/16

PhpSpreadsheet でExcel ファイルを読み込む (CakePHP3)

 

バリデーション時に、その時の条件に応じてバリデーションルールを変更したい場合がある。

通常のバリデーションルールは当該モデルのパブリック変数に初期代入の形で設定するため、途中で変更するのは厄介だ。

で、 CakePHP V2 のドキュメントを見ていたら、コールバックメソッド beforeValidatebeforeValidate(array $options=array()) のように定義されていることが分かった。

コントローラ側で $this->{model}->validates(array(...)) とすることで配列として任意のオプションをモデルの beforeValidate($options) に渡すことができる。このオプションでその時の条件をユーザ定義の beforeValidate() に渡し、beforeValidate 側では与えられた条件を吟味して必要に応じてモデル側の validator() メソッドを介して

	$this->validator()->add(...)

	$this->validator()->setRule(...)

あるいは

	$this->validator()->delete(...)

のように動的にバリデーションルールを変更すればよい。

なお、モデルの validates() メソッドはそれ自身が fieldList などいくつかのオプションを定義しているので、ユーザ定義オプションはそれらとは重複しないように決める必要がある。

関連タグ: CakePHP2 

関連エントリー