2012-07-20 51 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