我正在使用cakePHP开发小型网页并试图掌握MVC概念。
我有控制器,我正在检索具有指定ID的帖子。
$post = $this->Post->findById($id);
我需要检索帖子标题,与它的id连接 - 但我不想直接在控制器中执行此操作。 当然我可以写在$ post ['id']。','。$ post ['title']下面,因为$ post是一个数组。 但在许多地方都需要这样做。我能以某种方式扩展模型以实现方法吗?
我的方法是:
class Post extends AppModel {
public function getTitleWithId() {
return $this->id.','.$this->title;
}
}
但是我看到模型对象并不是最后一次获取的对象。
也许我只需要创建PostEntity对象,在构造函数中接受findById返回的数组?但也许有更好的解决方案。
答案 0 :(得分:2)
您的方法是正确的:让所有数据管理都在模型中。
尽管如此,请查看虚拟字段。它会更容易连接:
http://book.cakephp.org/2.0/en/models/virtual-fields.html
然后你可以找到你的虚拟领域:
$this->Post->find('first', array(
'conditions' => array(
'id' => $id
),
'fields' => array('yourVirtualField')
));
修改强>
既然我已经再次阅读了你的问题,可能你需要做一个行为:
http://book.cakephp.org/2.0/en/models/behaviors.html
将其视为一种拥有多重继承的方式(不一样,但有点想法)。您可以在其上开发方法,并将此行为仅附加到您需要的模型:
public $actsAs = array('yourBehavior');
答案 1 :(得分:1)
在CakePHP中,Model
类是管理器,而不是Model
的实例(即使id
存储在其中)。您只需将id
传递给您的方法并返回您想要的内容:
class Post extends AppModel {
public $name = 'Post' ;
public function getTitleWithId($id) {
$post = $this->read(null, $id) ;
return $post[$this->name]['id'].','.$post[$this->name]['title'];
}
}