Cakephp2.0にCakeEntityを入れてみた(2)

前回の記事でCakeEntityを導入しましたが、今回はその補足です。

CakeEntityの導入で、モデルから返ってくるデータがオブジェクトになりました。
これだけでも[“”]から->で2文字の削減ができ可読性もあがりました。
さらに、CakeEntityには オブジェクトをあらかじめ定義したクラスのインスタンスとして返してくれる機能があります。

この機能を使用するには、モデルクラスのまえにEntityの子クラスを定義する必要があります。

[php]
<?php
CakePlugin::load(‘Entity’);
App::uses(‘EntityModel’, ‘Entity.Model’);
App::uses(‘Entity’, ‘Entity.Model’);//新たに追加

class UserEntity extends Entity{
}

class User extends EntityModel {
//…
[/php]

このように(モデル名)+ Entityのクラスが定義することで、このクラスのインスタンスがモデルから返ってきます。
また、当然UserEntityクラスにメソッドを追加するとビューで呼び出すことができます。

[php]
class AuthorEntity extends Entity{
public function getAgeString(){
return $this->age." years old.";
}
}
[/php]
このように定義すると
[php]
//Controller
$user = $this->User->findById(1);
$this->set(compact("user"));

//view
<?php echo $user->getAgeString(); /* "30 years old." */ ?>
[/php]
のように利用できます。

さらに、関連モデルも含めて取り出す場合は関連先のモデルもEntityModelとEntitiyクラスで書き直されていると自動的にそのクラスのインスタンスとして返ってきます。
そうでない場合は配列のプロパティとしてエンティティに格納されます。

関連してそうなエントリ

iwamoto