CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
2025/01/31
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか?
CakePHP4系、CakePHP5系で新たにレコードを登録する際、「newEmptyEntity()」を使って空のオブジェクトを作成するかと思います。
この作成されたオブジェクトは「空」なのだろうか?と思い確認をしてみることにしました。
ちなみに、CakePHP4系、CakePHP5系の両方で確認しましたが、当たり前のように同じ結果でした。(CakePHPの処理ではなく、PHPの処理ですからね。)
「$this->Users->newEmptyEntity();」で生成した「$user」は「空」なのか?
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public function add() { $user = $this->Users->newEmptyEntity(); if ($this->request->is('post')) { $user = $this->Users->patchEntity($user, $this->request->getData()); if ($this->Users->save($user)) { $this->Flash->success(__('The user has been saved.')); return $this->redirect(['action' => 'index']); } $this->Flash->error(__('The user could not be saved. Please, try again.')); } $this->set(compact('user')); } |
上記は、Bakeして作成した Usersコントローラー内の addアクションです。
上記の 3行目の「$this->Users->newEmptyEntity();」で生成した「$user」は「空」なのか?
という確認を行いました。
「newEmptyEntity」で生成したオブジェクトを「empty」「is_null」などでチェックしてみた
具体的なチェックの処理と結果は以下の通りでした。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$userNewEntity = $this->Users->newEmptyEntity(); if($userNewEntity){ echo "True<br>"; // ← True(Objectがあるので空ではない) } else { echo "False<br>"; } if(empty($userNewEntity)){ echo "EmptyTrue<br>"; } else { echo "EmptyFalse<br>"; // ← EmptyFalse(Objectがあるので空ではない) } if(is_null($userNewEntity)){ echo "NullTrue<br>"; } else { echo "NullFalse<br>"; // ← NullFalse(Objectがあるので Nullではない) } if($userNewEntity == []){ echo "True<br>"; } else { echo "False<br>"; // ← False(Objectがあるので空配列ではない) } |
上記の中にコメントで結果を書いていますが、いずれも「空」「null」ではない、という結果になっています。
「$this->Users->newEmptyEntity();」で「空のエンティティ」を作る処理ではあるものの、作成されるものは「空のオブジェクト」であるので、「empty()」などでチェックするとそれは「空」ではないと判断されるということですね。
オブジェクトが生成されていますので、空ではないですよね。そりゃそうですよね、と。
「newEmptyEntity()」が空なのか、明確にしたかった理由
「newEmptyEntity()」が空なのか、これまであまり気にしたことがなかったのですが、それを明確にしたかった理由は、以下のように「newEmptyEntity()」で作成した値を引数として別の関数に渡す処理を構築しようとしていたためです。
より具体的には、addと editで行う処理を共通化しようと考えたのですが、その際、「newEmptyEntity()」で作成した値を「empty()」でチェックすることができるのだろうか?と疑問に思ったためでした。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public function add() { // 前略 $userNewEntity = $this->Users->newEmptyEntity(); $userRes = $this->_addEdit($userNewEntity); // 後略 } public function _addEdit($userEntity = []) { // 引数のチェック if(!empty($userEntity)){ return "Error"; } // 続きの処理 // : // : } |
「newEmptyEntity()」で作成した値は、「空」ではないことが明確になりましたので、引数が渡ってきていないときは、「empty()」が「true」になりますので、判別してエラー処理ができることが明確になりました。
これで、より不具合が少ないプログラムを組むことができますね。
想定外の値も想定した処理を構築する必要がある
かつて、私にプログラムを教えてくれた先輩がこんなことを言っていました。
「想定外の値が来た場合でもハングアップ(異常終了)しない処理を心がけろ」と。
想定外の値が来たときでも異常終了してしまうのではなく、想定外の値が来たとしてログを出力し、適切なエラー処理を実施したうえで、安全に停止するように処理を構築しろ、という意味です。
そのため、私が作成するプログラムは、若干エラーチェックがくどすぎると思うこともありますが、最初に教えてくれた方の教えなので、習慣になってしまっているとも言えますね。
どれだけの想定外を想定できるかが、いいシステムを構築するためのノウハウだ、ということも言っていましたね。
まぁ、どれくらいの信頼性が必要なシステムなのか、にもよりますけどね。
CakePHP5の関連記事
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、5で$_SERVERと同じようにURIを取得する「getUri()」の紹介
getParam('action')で取得するアクション名は別関数に移動しても不変CakePHP4系、CakePHP5系のexists()でカラムを指定して値の有無をチェックする方法解説
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5でSELECT telephone as tel FROM usersの様にasでカラムに別名を付ける方法
CakePHP4、5の認証処理で認証が通らない際の確認方法と確認箇所の紹介
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
その他の「CakePHP5」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
CakePHPのバージョンの調べ方2点を紹介。CakePHP3~CakePHP5は共通だが CakePHP2はフォルダ構成が異なるためコマンドのパスもオプションも異なる。
-
-
CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法
CakePHP3でcomposerを使ってパッケージ(ライブラリ、プラグイン)をインストールする方法の解説。PHPを使うのはCakePHP3が初めてというような方への使い方から解説。
-
-
CakePHPのFlashエラーは出るが入力項目ごとのメッセージが出ないエラーの原因
Bakeして自動生成した入力フォーム処理を元に少し処理を追加したら、入力エラーがあってもエラーメッセージが表示されなくなった。原因はリダイレクトの処理にあった。
-
-
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3.7でCookieを保存、取り出し、削除する方法を解説。CakePHP3でのCookieの取り扱いはバージョンごとに変更されるため、環境に合わせた方法を探す必要がある。
-
-
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。
-
-
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。
-
-
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。
-
-
CakePHP4の規約外のカラムをキーにアソシエーション(テーブル連結)する方法
CakePHPで規定外のカラム名のキーを指定してアソシエーション(テーブル連結)をする方法を解説。アソシエーション名によってはミスが発生しやすい点もあるので注意も必要。
-
-
getParam('action')で取得するアクション名は別関数に移動しても不変CakePHP4系、5系では「getParam()」で処理中のアクション名を取得できる。そのアクションから別関数を呼び出してた関数でアクション名を調べたが同一の名称だった。