我正在尝试使用干净的 URL 实现搜索模块。类似于 www.website.com/search/ searchterm。我已经用 EWZSearchBundle 创建了一个可搜索的索引,因此不涉及数据库,因此不需要实体。
public function searchAction(Request $request)
{
$form = $this->createFormBuilder()
->add('query', 'text')
->getForm();
if('POST' === $request->getMethod()){
$form->bind($request);
if ($form->isValid()) {
return $this->redirect($this->generateUrl('search_process', array('query' => $request->query->get('query'))));
}
}
return array(
'form' => $form->createView(),
);
}
我创建了一个没有实体的简单表单,并将表单操作发送给它自己。如果它是 POST 请求,我会验证表单并使用干净的 URL (www.website.com/search/searchterm) 将其发送到搜索过程。
public function searchProcessAction($query)
{
$search = $this->get('ewz_search.lucene');
$results = $search->find($query);
return array(
'results' => $results,
);
}
在搜索过程中,我从干净的 URL 中获取搜索词,并在我的索引中搜索它并返回结果。这应该是一个非常简单的过程,只有一个问题。
因为我不需要使用实体,所以它永远不会变成 POST 请求,也永远不会进入if('POST' === $request->getMethod())
.
我知道我的方式和额外的重定向,但我不知道如何保持一个干净的 URL 进行搜索。我愿意接受有关整个过程的任何建议。