CakePHP3でバーチャルフィールドの作成
カテゴリ:実物コーディングチャレンジ
今年からinglowで開発担当をしています寺澤です。今回はCakePHP3でバーチャルフィールドを作ってみようと思います。
★環境
- PHP 7.4.6
- CakePHP 3.8.*
- MySQL 5.0.2
また、弊社ではWebプロモーション成功事例集をまとめた限定資料を無料で配布しています。
Webマーケティングに興味がある方は、下記ページより目を通してみてください。
目次
バーチャルフィールドとは
CakePHP3のモデル、Entityの機能として仮想フィールドの機能があります。 テーブルの項目をそのまま表示させるのではなく、少し加工して表示させるときに便利です。
たとえば、郵便番号と都道府県と住所をビューで文字列連結して表示させると結構めんどくさいですよね。 しかもその箇所がたくさんあったら‥‥。 そんなときにEntityで一度作ってしまえばビューの表示が簡単になります。
制作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//namespace App\Model\Entity; protected $_accessible = [ 'name' => true, 'mail' => true, 'password' => true, 'address' => true, 'pref' => true, 'town' => true, 'created' => true, 'modified' => true, ]; //$_virtualは中に設定したフィールドがこのテーブル内のカラムとして一緒に取得される protected $_virtual = [ 'my_place' ]; //メソッド名は対応させたいフィールド名をキャメルケースで書き、先頭に_をつける。 public function _getMyPlace() { return $this->_properties['address'] . ' ' . $this->_properties['pref'] . $this->_properties['town']; } |
バーチャルフィールドの生成
protected $_virtual = []の中に追加したいカラムを入力すると、
コントローラーで取得したときに一緒に生成したカラムも取得できます。
取得結果
試しにdd関数でカラムを取得してみましょう
1 2 3 4 5 |
//namespace App\Controller; public function index(){ $users = $this->paginate($this->Users); dd($users->toArray()); } |
あとはviewでforeachなどで配列を回せば普通のカラムと同じように表示をさせることができます
1 2 3 4 5 6 7 |
<?php foreach ($users as $user):?> <tr> <td><?= h($user->name) ?></td> <td><?= h($user->mail) ?></td> <td><?= h($user->my_place ?></td> </tr> <?php endforeach ;?> |
おわりに
今回の内容だとそこまで利便性が感じられなかったかもしれません。
しかし、viewなどで文字列連結を作ると、コードの可読性が悪くなる面があります。
あまり使わないところでちゃちゃっと作成して、よく見るところは綺麗にしてあげることでミスなども防げるのではないかと思います。
また別の記事に、webで集客する方法をまとめております。
詳しく解説しているので、ご興味のある方は、ぜひこちらもご覧ください。
弊社inglowでは、これから広告の運用を考えられている方、あるいはこれから広告代理店に運用をお願いされる方向けに、「業界別Web広告の成功事例」をまとめた資料を無料配布しております。
下記のフォームに入力いただくだけで、無料で資料をダウンロードしていただけます。ぜひご利用下さい。