我有一个简单的Web应用程序,其中包含我正在使用CakePHP重新编写的数据库表orders
和products
。还有更多,但为了简单起见,我在这里只使用这两个。在Web应用程序中,我希望能够搜索项目,搜索订单以及执行与订单相关的工作,但我在设置和选择用于制作此Web应用程序的组件时遇到了困难。作为我的问题的一个例子,我有以下页面。看看下面的布局。
|------------------------------|
| My App |
|------------------------------|
|Search <--| search order |
|Orders | search product |
|etc. | |
| | |
| | |
|------------------------------|
图:显示左侧导航栏和正文。箭头表示我们正在访问的页面。
控制器:对于此搜索 页 ,应使用哪些控制器?我现在默认为PagesController
静态页面,但此搜索页面是否应该使用PagesController
?我创建ProductsController
和OrdersController
模型时创建了Product
和Order
,但使用全新的控制器(可能是一个名为{{ 1}}。这样,网址就会保留在SearchController
之下,并且不会遍布整个地方。这是正确的方法吗? (我知道我可以重写网址,但以后会这样做)
模型和操作:我有myapp/search/...
和Product
个模型。这些模型中的每一个都具有其各自的DB表的搜索逻辑。如果为上面的页面创建了一个新的控制器,那么该控制器可以简单地使用这些模型的操作吗?我正在阅读控制器和模型分离是完全正常的,实际上是一件好事。起初我以为他们在一起,但我越熟悉CakePHP,似乎恰恰相反。
如果我的方法(从1和2)效率不高,错误或不合适,你能否提出一个好的结构来设置这个特定的页面,关于使用什么控制器以及控制器应该如何使用模特和他们的行动?
答案 0 :(得分:1)
我建议您使用其他搜索控制器。在搜索控制器内部,在类级别添加此行var $uses = array('Order', 'Product');
,以便您可以访问订单和产品表。
只需使用$this->Order->find()
和$this->Product->find()
答案 1 :(得分:1)
<强> TLDR:强>
真正的答案是 - 个人偏好。无论是创建SearchesController
还是使用ProductsController
和OrdersController
(但不使用PagesController),这都不是什么大问题。
我的偏好和推理
我会创建一个SearchesController
。这仅仅是出于组织目的而最有意义的。您的所有搜索功能都可以位于同一控制器中,所有搜索视图都位于“视图/搜索/”文件夹中,任何/所有相关的css和javascript都可以位于/css/searches
或/js/searches/
(如果你喜欢像我一样组织这种方式。)
您还需要制作搜索模型(Models/Search.php
)并在其中添加:public $useTable = false;
[details]告诉它您不会制作{{1}表格。
在每个SearchController的操作中,如searches
和function orders()
,您可以使用function products()
[details],从$this->loadModel('Order');
访问这些模型,然后运行你的搜索。
坚持使用“Fat Models,Skinny Controllers”的口头禅,我建议保持控制器代码小 - 如下所示:
SearchesController
然后,在你的订单模型中(按照这个例子),做逻辑的主要内容(下面是粗略的想法):
$opts = array('limit'=>5);
$orders = $this->Order->search($string, $opts);
将所有控制器操作保持在一起可以让您更轻松地进行全面更改 - 例如,如果您想为每页更改所有搜索页面的结果设置单个变量等等。我确信还有很多其他的想法,但最重要的是,它将类似的代码放在一起。
答案 2 :(得分:0)