蛋糕php 1.3?我可以在任何控制器和视图中使用任何模型吗?

时间:2010-11-06 16:30:15

标签: php cakephp cakephp-1.3 cakephp-1.2

我的问题是以身作则。我必须在页面中显示所有类别的书籍和复选框,我希望将其发布到下一个视图而不与数据库进行交互,并且我希望将它们存储在逗号分隔的字符串中的隐藏字段中。

其实我有找一本书的标签。用户点击它,它有一个列出的书籍类别列表,我从类别模型和使用类别控制器索引功能。 我想将用户选择的类别发布到下一个视图,比如我将从其他模型和控制器中获取有关用户过滤的更多信息。

实际上我想知道我要做什么我想开发这个找书功能。我应该有一个模型和一个控制器,他们使用一些表来查找一本书或者我可以使用任何模型控制器用于此功能。

3 个答案:

答案 0 :(得分:3)

Matiasf的建议确实有效,但这不是推荐的做事方式。

如果您将模型添加到$ uses属性,您将为控制器中的每个操作加载这些模型,这需要更强的处理能力,并可能对您网站的性能产生不利影响。

您可以在the CakePHP documentation中详细了解为什么这不是一个好主意。

更好的选择是使用loadModel()控制器方法。

例如:

BooksController extends AppController {
    function index() {
        $this->loadModel('Category');
        $this->set('categories', $this->Category->find('all'));
    }
}

您可以在文档中找到有关loadModel方法的更多信息:book.cakephp.org/view/977/Controller-Methods#loadModel-992

答案 1 :(得分:2)

除了加载模型本身之外,只要两个模型之间存在关系,您就可以在控制器之外使用模型。例如,请考虑以下关系:

"Books" Model BelongsTo "Category" Model

在这种情况下,您可以使用

$this->Book->Category->find() inside BooksController 
as well as 
$this->Category->Book->find() inside CategoriesController

来到您的案例,如果您发布数据库架构会有所帮助。然而,为了找到一本书,我假设您正在使用某些参数,如类别,流派,出版商等。假设每个参数都有自己的数据库表和模型,您的搜索跃点将如下:

第1页:带有选择复选框的类别列表

  • 功能 - 类别控制器的索引()
  • 查看 - / app / views / categories / index
  • 传递给 - 流派控制器的搜索()

第2页:带选中复选框的类型列表

  • 功能 - 流派控制器的搜索()
  • 查看 - / app / views / genres / search
  • 传递给 - Publishers Controller的搜索()

第3页:包含选择复选框的发布商列表

  • 功能 - 发布商控制器的搜索()
  • 查看 - / app / views / publishers / search
  • 传递给 - Books Controller的结果()

第4页:根据给定参数过滤的图书清单

  • 功能 - 书籍控制器的结果()
  • 查看 - / app / views / books / results
  • 通过 - 无

我尽量做到尽可能的指导,如果你还不清楚如何寻找书籍,请留下评论。如果您需要帮助将数据从一个控制器传递到另一个控制器,请阅读CakePHP手册(http://book.cakephp.org/view/57/Controller-Methods)或Google使用“cakephp将数据从一个控制器传递到另一个控制器”作为关键字。

答案 2 :(得分:1)

关于标题中的问题:

是的,您可以在任何控制器中使用任何型号。设置

var $uses = array("Model_1", "Model_2", ...);

模型对象应该是可访问的

$this->Model_1->find(...);