我必须在cakephp创建2个不同的视图搜索功能


Do I have to create 2 different views for search function in cakephp?

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

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

例如,在你的控制器中,你可以这样写:

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
}

如果你想要一个单一的函数/url,这更多的是一个品味问题。就我个人而言,我更喜欢独立的观点,因为它减少了"如果/其他"的数量。此外,一个搜索表单可能被放置在多个页面上,而您只有一个搜索结果页面。

我认为最好使用两个单独的视图:

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(带搜索表)

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