Cakephp2.0にCakeEntityを入れてみた

Cakephp2.0.5にCakeEntityプラグインを導入したメモです。

Cakephpはすばらしいフレームワークです。
2.0系列になってさらに改良されましたが、未だfind()から返ってくるのはネストした配列です。
配列で返ってくることによって、データと深く結びついた処理にヘルパーを作ったりするのは非常に気持ち悪いです。
これがオブジェクトとして返ってくると非常にコードがきれいになります。
(オブジェクトのメリットについてはCakeEntityの作者さんの記事が詳しいです。)

Cakephp3からはデフォルトがオブジェクトになるという噂ですが、CakeEntityプラグインで一足早くオブジェクト指向な書き方を体験したいと思います。
この記事ではCakeEntityをCakephp2.0.5に入れたときの方法を紹介したいと思います。

1.githubからCakeEntityの2.0ブランチを取得する
gitは初心者なので、ググった結果以下のようにすると2.0ブランチのコードを入手できました。

[bash]
git clone https://github.com/kanshin/CakeEntity.git (app/Pluginのバス)/Entity
git checkout origin/2.0
[/bash]

以上でapp/Plugin/Entityという名前でプラグインが配置されたはずです。

2.モデルをEntityModel継承にする
現在使用しているモデルをEntityModelの子クラスに変更しましょう。
EntityModelはcakeのModelと100%互換らしいので、この操作で従来のコードが動かなくなることはありません。たぶん。
2.0系列からファイルの読み込み方法が変更になったので、githubのREADMEとは異なる書き方になります。
[php]
<?php
CakePlugin::load(‘Entity’);
App::uses(‘EntityModel’, ‘Entity.Model’);

class User extends EntityModel { }
[/php]
このように書き換えます。
これでCakeEntityModelを使用する準備ができました。
モデルからオブジェクトで取り出したい場合は
[php]
this->User->find(‘all’,
array(
‘conditions’=>array(…),
‘entity’=>true
));
[/php]
のようにentityオプションをtrueとして渡してあげるだけです。

関連してそうなエントリ

iwamoto