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の関連記事
CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法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」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
-
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。
-
-
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
CakeDC謹製Usersプラグインの紹介。UserHelperを利用し、ログアウトのリンクや権限があるときのみ表示されるリンク、プロフィールページへのリンク、reCAPTCHAの設置方法などを解説。
-
-
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。
-
-
CakePHP3のfriendsofcake/searchでブックマークチュートリアルのタグ検索を実装
CakePHP3のCookbookにあるブックマークチュートリアル。ここで紹介されているタグで検索する処理を検索プラグイン「friendsofcake/search」で実現する方法を解説しました。
-
-
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5のヘルパーで他のヘルパーを読み込む方法を解説。公式の日本語CookbookはCakePHP4のソースのままで間違っているため注意が必要。CakePHP4からの移行の際も同じ点に注意が必要。
-
-
CakePHP3でWarning Error: SplFileInfo::openFile()エラーが発生した場合の対処方法
CakePHP3のキャッシュファイルのパーミッションエラー Error: SplFileInfo::openFile()が発生した場合の対応方法解説。app.phpにキャッシュファイルのパーミッション設定を行い、既存のファイルは削除。
-
-
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3でパンくずの指定方法の解説。2つのヘルパーがあるが簡単なHTMLヘルパーを使った方法を、実際の状況に合わせて3つのパターン(エレメント化、ブロック化)にして解説。
-
-
CakePHP5系で認証機能のAuthenticationプラグインをインストール・エラー発生注意
CakePHPのユーザ認証に使用するオフィシャルなプラグインAuthenticationだが、CakePHP5系では Authentication Ver.3系を使う必要があるが、公式ChiffonBookが間違えている。
-
-
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。