设想:
- 我没有 AJAX。
- 我有一个带有
GETmethod 和csrf_protectiondisabled 的搜索表单,用于过滤显示和分页的实体myEntityListAction,可通过 uri 访问/myapp/myentity/list - 用户打开
/myapp/myentity/list,提交过滤表单并转到第 2 页。他现在在/myapp/myentity/list?entity_filter[search]=something&page=2 - 用户打开另一个页面(假设显示的实体之一的详细信息),然后单击
/myapp/myentity/list
我想让他看到页面/myapp/myentity//list?entity_filter[search]=something&page=2
我试图使过滤器粘到用户的会话中,这样当用户在/myapp/myentity/list没有任何参数的情况下重新打开时,他会得到最后一次看到的结果,具有相同的过滤器和页码。
我遵循了这种方法,但我认为它已被高度弃用,因为我正在修改$request对象和$_GET超全局(由于直接使用 $_GET 的分页库),尽管它有效。
/**
* @Route("/myapp/myentity/list", name="entity_list")
* @Method({"GET"})
*/
public function myEntityListAction(Request $request) {
if (0===$request->query->count()) { //querystring is empty
$prev_query=$request->getSession()->get('my_entity_list', null);
if ($prev_query) { //is there something in session?
$_GET=$prev_query;
$original_request=$request;
$request=$request->createFromGlobals();
$request->setSession($original_request->getSession());
}
} else { //i have something in my querystring
$request->getSession()->set('my_entity_list', $request->query->all()); //i store it in session
}
//...do the other stuff (form, filters, pagination, etc)
}
我认为我将采用另一种方法,将用户重定向到/myapp/myentity/list?entity_filter[search]=something&page=2(从会话中读取),这样我就不必修改$_GET或$request.
问题来了:如何在不进行重定向的情况下安全地编辑 $request 以注入或更改我需要的东西?我可以通过子请求安全地做到这一点吗?