2012-07-20 56 views
0

我想用四个标签('a','b','c','d')过滤我网页上的数据。比方说,用户在这个页面上:如何更改会话数据并保持在同一页面上?

/data/1/slug-for-one 

和用户想要的数据,现在筛选的“C”,他点击“C”,在他的会话对象变量被改变,并且数据被正确过滤同时'重新加载'相同的页面。

我如何构建过滤器按钮的链接?创建一个专门的控制器,解析过滤器并重定向?控制器在哪里获得url重定向?我不希望每个GET都传递路由/ URL,因为用户可能会做坏事。

编辑:

正如在评论中指出,这是一个坏主意,Stroe的会话过滤器。那么通过过滤器的最佳方式是什么?是否可以设置一些可在实际控制器之前解析的路由前缀?

例如:

/filter/c/data/1/slug-for-one 
+0

您可以使用POST请求,并添加POST请求的路线为处理这一 – 2012-07-20 21:30:41

+2

是否有一个原因,这个数据必须驻留在会话的数据的专用控制器?这看起来像是错误的地方。听起来像它应该是一个参数(GET/POST)。另外,如果用户使用不同的标签打开多个页面/选项卡,该怎么办? – samitny 2012-07-20 21:31:22

回答

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 
    } 
} 
?> 

或者只是使该检查请求是否是POST请求,然后将其过滤当前操作的if

<?php 
if ('POST' == $this->getRequest()->getMethod()) { 
    // ... filter 
} 
?> 
+0

这适用于一个路由/页面。过滤器需要在所有页面上都处于活动状态,并且必须至少选择一个标签。这将导致每个链接发送POST数据听起来很丑。 – 2012-07-20 21:58:08