【问题标题】:cake php 1.3? Can I Use any model in any controller and views?蛋糕PHP 1.3?我可以在任何控制器和视图中使用任何模型吗?
【发布时间】:2011-05-06 01:35:16
【问题描述】:

我的问题是举个例子。我必须在一个页面中显示所有类别的书籍和复选框,我想在不交互数据库的情况下将其发布到下一个视图,并且我想将它们存储在逗号分隔字符串中的隐藏字段中。

实际上,我有一个用于查找书籍的选项卡。用户单击它,它列出了我从类别模型和使用的类别控制器索引功能中获得的书籍类别列表。 我想将用户选择的类别发布到下一个视图,例如我将在哪里获取有关用户过滤来自另一个模型和控制器的书籍的更多信息。

实际上我想知道我必须做什么此功能的控制器。

【问题讨论】:

标签: php cakephp cakephp-1.3 cakephp-1.2


【解决方案1】:

关于标题中的问题:

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

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

并且模型对象应该是可访问的

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

【讨论】:

    【解决方案2】:

    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

    【讨论】:

    • 1Up。 $uses 属性是使用不是按照 Cake 的常规命名命名的模型,或者使用与现有控制器的逻辑紧密耦合的模型。
    【解决方案3】:

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

    "Books" Model BelongsTo "Category" Model
    

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

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

    谈到你的情况,如果你发布你的数据库模式会有所帮助。不过,要查找一本书,我假设您使用某些参数,如类别、流派、出版商等。假设每个参数都有自己的数据库表和模型,您的搜索跳数如下:

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

    • 函数 - 类别控制器的 index()
    • 查看 - /app/views/categories/index
    • 传递给 - 流派控制器的 search()

    第 2 页:带有可供选择的复选框的流派列表

    • 函数 - 类型控制器的 search()
    • 查看 - /app/views/genres/search
    • 传递给 - Publishers Controller 的 search()

    第 3 页:发布者列表,带有可供选择的复选框

    • 函数 - 发布者控制器的 search()
    • 查看 - /app/views/publishers/search
    • 传递给 - Books Controller 的 results()

    第 4 页:根据给定参数过滤的图书列表

    • 函数 - Book Controller 的 results()
    • 查看 - /app/views/books/results
    • 传给 - 无

    我尽量提供指导,如果您仍然不清楚如何搜索书籍,请发表评论。如果您在将数据从一个控制器传递到另一个控制器时需要帮助,请阅读 CakePHP 手册 (http://book.cakephp.org/view/57/Controller-Methods) 或使用“cakephp 将数据从一个控制器传递到另一个控制器”作为关键字。

    【讨论】:

    • 感谢朋友们,我将尽我所能,利用您所有的好建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多