我是否必须在cakephp中为搜索功能创建2个不同的视图?

时间:2015-10-24 14:14:43

标签: php cakephp

我是CakePHP的新手,想在我用它编写的网站上有一个搜索工具。我在控制器中有search()函数,基本上所有逻辑都在这里。所以在视图文件夹中我创建了一个search.ctp文件,我在其中编写了表单的代​​码以填写搜索详细信息。但我无法弄清楚在哪里编写将显示搜索结果的代码。我应该创建另一个.ctp文件,如果是这样,那么如何将此文件与search()函数连接起来,因为它有另一个名称(而不是search.ctp)?提前谢谢。

2 个答案:

答案 0 :(得分:1)

这不是必需的,但无论是否显示结果,您都必须在控制器功能和视图中进行切换。

例如,在您的控制器中,您将拥有:

function search()
{
   if (!empty($this->data))
   {
     // .. do search, gather results
     $this->set('results', $results);
   }
}
只有在您输入表单时才会填写

$this->data

在你看来,你会写一些类似的东西:

if (isset($results))
{
   // print table with results
}
else
{
   // show search form
}

如果你想要一个单独的功能/网址,那更多的是品味问题。我个人更喜欢单独的视图,因为它减少了if / elses的数量。此外,搜索表单可以放在许多页面上,而您只有一个搜索结果页面。

答案 1 :(得分:0)

我认为更好的方法是使用两个不同的视图:

function search()
{
   if (!empty($this->data))
   {
     // .. do search, gather results
     $this->set('results', $results);
     return $this->render('search_results');
   }
   return $this->render('search_form');
}

然后创建两个ctp文件search_results.ctp(带结果表)和search_form.ctp(带搜索表单)

您应该在视图中使用尽可能少的逻辑