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

  1. HOME > 
  2. 加藤 正人のデベロッパーズブログ > 
  3. CakePHP 3.x の accessor と mutator

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

加藤 正人

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

加藤 正人

2016/09/03

CakePHP 3.x の accessor と mutator

 

CakePHP 2.x ではレコードは配列で実装されていたが、3.x では Entity オブジェクトになり、フィールドのアクセスに accessor (getter) と mutator (setter) が導入された。

この accessor や mutator を使用することで、フィールドごに保存に際してのデータの加工や変換を集約的に記述できるようになった。

Mutator

mutator は、データを保存する前に変更 (mutate) する機構である。これを使うことで、特殊な変更や別データ生成が必要な場合の処理を記述できる。

例えば、フォームからパスワードを読み込み、データベースには生のパスワードではなく暗号化したパスワードを保存するような場合を考えてみる。

CakePHP 2.x ではそのような場合、beforeSave() コールバックメソッドを利用し、バリデーション後にデータを変換してから格納していた。

beoferSave() コールバックメソッド内では、

  • 当該フィールドの存在チェック
  • 存在していた場合に適用する処理

を列挙して記述する。

一方 CakePHP 3.x では beforeSave() は廃止されている代わりに mutator を利用できるようになり、下記のような流れで処理できる。

これにより、各フィールドに一意に対応するメソッドに当該フィールドの処理だけを記述することで処理される。(当該フィールドの存在チェックは CakePHP 側で行なうためユーザが記述する必要はない。)

変換処理はフィールドに対応するメソッド内に集約されるため、可読性とメンテナンス性の向上が期待できる。

ただし、mutator は beforeSave() とは異なりバリデーションの前に適用される点に注意。これは、mutator で変換したデータもバリデーション対象にできるよう配慮しているのかもしれない。

関連タグ: CakePHP3 

関連エントリー

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

CakePHP3 のユーザー定義ファインダーのオプション

PHP3 でデバグモードを一旦無効化した後再度有効化するとDebugKit が見つからない

CakePHP3 で JSON 応答のための定番処理

CakePHP3 でタイムゾーン変換

バージョンを指定して CakePHP をインストールする

CakePHP サイトの移転時の注意

CakePHP3 のアソシエーションで、紐づけ用フィールドを指定する

CakePHP3 のコマンドライン実行

CakePHP3 の Virtual Field と accessor (Getter)

CSRF token mismatch

2019/07/04
CSRF token mismatch

CakePHP3 で created と modified に日付が自動付与されない場合のメモ

CakePHP3 で

CakePHP3 の JSON 出力でエラー

CakePHP3 のミューテータで書き換えたデータが保存されない件

CakePHP3.6.2 のタイムスタンプ調整 (XSERVER の場合)

CakePHP3 で DebugKit が表示されない

最新版 composer.phar のインストール

PHP 7.x で CakePHP 3.x を使う

Remi's PHP5.6 と intl モジュール

X2 と CakePHP 3.x

2017/05/23
X2 と CakePHP 3.x

CakePHP3 の便利機能

CakePHP3 と SQLite

2017/02/20
CakePHP3 と SQLite

CakePHP3 でテーブル不使用フォームのバリデーション

CakePHP3 のファインダーメソッド

CakePHP 3.x の accessor と mutator 【その2】

XSERVER X10 に CakePHP 3.x をインストールする

XSERVER で CakePHP 3.x が Fatal error

CakePHP 3.x インストールメモ

Composer メモ

2015/06/13
Composer メモ