我想用四个标签('a','b','c','d')过滤我网页上的数据。假设用户在此页面上:
/data/1/slug-for-one
并且用户希望现在为“c”过滤数据,他点击“c”,更改了会话对象中的var,并在“重新加载”同一页面时正确过滤了数据。
如何构建过滤器按钮的链接?创建一个特殊的控制器,解析过滤器并重定向?控制器在哪里获取重定向的URL?我不想通过每个GET传递路由/网址,因为用户可以做坏事。
编辑:
正如评论中指出的那样,在会话中使用过滤器是一个坏主意。什么是通过过滤器的最佳方式?是否可以设置一些可以在实际控制器之前解析的路由前缀?
示例:
/filter/c/data/1/slug-for-one
答案 0 :(得分:0)
您可以使用POST请求发送变量,然后使用自定义操作处理它。像这样:
<?php
// src/Acme/DemoBundle/Controller/DataController.php
namespace Acme\DemoBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
// ...
class DataController extends Controller
{
/**
* @Route("/data/{id}/{slug}")
* @Method("POST")
*/
public function filterAction($id, $slug)
{
$tag = $this->getRequest()->get('tag');
// ... filter it by tag and
}
}
?>
或者只是在当前操作中创建if
,检查请求是否为POST请求,然后对其进行过滤。
<?php
if ('POST' == $this->getRequest()->getMethod()) {
// ... filter
}
?>