Symfony URL组织
我正在处理的项目包含搜索功能。我希望用户能够将一个页面与他们的查询一起添加书签,这样他们就可以将他们的搜索页面添加书签 在传统的实现中,我只是在URL中使用GET参数 然而,对于symfony,我很难理解该功能最好使用什么?这只是偏好的问题吗 我是否应该创建一个控制器,例如:Symfony URL组织,symfony,frameworks,navigation,symfony1,url-routing,Symfony,Frameworks,Navigation,Symfony1,Url Routing,我正在处理的项目包含搜索功能。我希望用户能够将一个页面与他们的查询一起添加书签,这样他们就可以将他们的搜索页面添加书签 在传统的实现中,我只是在URL中使用GET参数 然而,对于symfony,我很难理解该功能最好使用什么?这只是偏好的问题吗 我是否应该创建一个控制器,例如: search/{query}/{page} 当用户单击某个选项时 description/{id} 或者我应该在URL中实现传统的get变量: 例如,请注意URL的堆栈溢出。当您搜索某个内容并浏览页面时,URL类似于: s
search/{query}/{page}
当用户单击某个选项时
description/{id}
或者我应该在URL中实现传统的get变量:
例如,请注意URL的堆栈溢出。当您搜索某个内容并浏览页面时,URL类似于:
search?q=“nav&page=2
但是当你点击一篇帖子时,默认情况下,URL会变成类似于questions/19157969/扩展导航的内容
,所以它是两者的混合体
对于相同的功能,不能使用类似于搜索/搜索词here/2
的东西吗?使用Symfony选择“放弃”选项有什么好处吗
非常感谢您的建议!非常感谢您!这是一个优先选择的问题。有人说,出于SEO目的,URL比查询字符串更重要。另外,/search/{query}/{page}总的来说,它看起来更好,但这只是我的观点。搜索词可能会很长。也许你的搜索机制相当简单,但我个人不想做这样的假设,特别是如果你计划在将来的某件事情上使用相同的功能,而你还没有设计出它的规模 在我看来,使用一个典型的GET字符串足够安全,控制器应该知道它需要什么变量,并且GET查询通常不会(不应该)对路由产生影响 但是,如果您想获得可以随时重新访问的漂亮的搜索URL,可以尝试将每个搜索存储在数据库中 示例(未经测试): 在本例中,请求发送到一个操作,该操作的GET字符串与普通操作一样(如果愿意,可以是POST),该操作保存搜索数据,然后重定向到一个操作,该操作从数据库获取搜索数据,进行过滤并显示结果 我看不出这种技术有任何真正的性能损失,要插入和选择搜索的数据库查询应该相对较小,但我可以看到存储它们的表很快变得非常满 此外,根据流行搜索词绘制报告(偶尔)总是很有用的
class SearchController extends Controller
{
/**
* @Route("/search" name="search")
* @Method("GET")
*/
public function searchAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$search = new Search();
$search->setQuery($request->query);
// The query field would be of an object type in this example,
// but you could store the data any way you want really.
// Add any additional information about the search/request to the entity.
$em->persist($search);
$em->flush();
$this->redirect($this->generateUrl('search_results', array(
'search_id' => $search->getId()
)));
}
/**
* @Route("/search/{search_id}", name="search_results")
* @Method("GET")
* @Template()
*/
public function resultsAction($search_id)
{
$em = $this->getDoctrine()->getManager();
if(! $search = $em->getRepository('AcmePostBundle:Search')) {
throw $this->createNotFoundException();
}
$query = $search->getQuery(); // This will be a ParameterBag
// Run your search filters
return array(
// Your search results
);
}
}