2012-07-20 2 views
0

내가 네 태그 ('A', 'B', 'C', 'D') 내 웹 페이지에 데이터를 필터링 할 수 있습니다.세션 데이터를 변경하고 같은 페이지에 머물러있는 방법?

/data/1/slug-for-one 

사용자가 데이터가 지금은 'C'에 대해 필터링, 그의 세션 객체에서 VAR을 변경, 'C'를 클릭 원하는 데이터가 올바르게 필터링 :의 사용자가이 페이지에 있다고 가정 해 봅시다 동일한 페이지를 '다시로드'하는 중입니다.

어떻게 필터 버튼에 대한 링크를 만들 수 있습니까? 필터를 구문 분석하고 리디렉션하는 특수 컨트롤러를 만드시겠습니까? 컨트롤러는 리다이렉트 할 URL을 어디에서 얻습니까? 사용자가 악의적 인 일을 할 수 있기 때문에 GET 당 경로/URL을 전달하고 싶지 않습니다.

편집 : 코멘트에 지적

으로, 그것은 stroe에 나쁜 생각 세션의 필터입니다. 그러면 필터를 전달하는 가장 좋은 방법은 무엇입니까? 실제 컨트롤러 이전에 분석 할 수있는 Routing prefix를 설정할 수 있습니까?

예 :

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

당신은 POST 요청을 사용하여이 데이터가 세션 데이터에 있어야합니다 이유가 있습니까이 –

+2

을 처리하는 특수 컨트롤러에 대한 사후 요청에 대한 경로를 추가 할 수 있습니까? 그것은 단지 잘못된 장소처럼 보입니다. 마치 매개 변수 (GET/POST)처럼 들리는 것 같습니다. 또한, 사용자가 다른 태그로 하나 이상의 페이지/탭을 열어 놓은 경우에는 어떻게해야합니까? – samitny

답변

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 데이터를 전송하게됩니다. –

관련 문제