vaa*_*ala 3 cakephp model find
我读到了关于"胖模型和瘦控制器"的概念.我当然想遵循这个概念.
现在,我的所有控制器都很胖,我的模型很瘦.我有很多在控制器中找到stmts(查询),我想转移到模型.但我不知道该怎么做.
我应该在模型的哪个函数中放置find语句?在模型中的set stmts之后,我是否可以自动在相应的视图中查看该数据?
有人可以举个例子吗?我已经通过了cakephp食谱博客样本.在那里,find stmts在控制器而不是模型中.该模型仅包含关系和验证.我还没有看到包含find stmts的模型示例.
men*_*sch 14
已给出的答案回答了您的部分问题.您可以在没有Model类声明的情况下使用find方法(因此$this->find()
代替$this->Model->find()
).
要遵循"胖模型,瘦模控制器"原则,您的模型应该包含应用程序的大部分业务逻辑,而控制器处理视图使用的模型中的数据.
因此,如果您希望find
在模型中发生所有逻辑,则应执行以下操作.
Product.php:
<?php
class ProductModel extends AppModel {
//Associations, etc. go here
function getProducts($limit=5) {
$products = array();
$products = $this->find('all', array('limit' => $limit));
return $products;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
请注意,您不能$this->set()
在模型中使用,您应该在控制器中使用它:
ProductsController.php:
<?php
class ProductsController extends AppController {
//Components, helpers, etc. go here
function index() {
$products = $this->Product->getProducts(10);
$this->set('products', $products);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
填充$products
变量(如果在数据库表中有记录)现在可以在您的视图中使用.
这是一篇很好的文章,详细介绍了Cake的概念,并且在一般的MVC菜谱中还有另外一篇.