2010-07-09 5 views
1

프론트 엔드에서 나는 목록과 양식 필터가있는 페이지가 있습니다. 은 소셜 네트워크의 모든 사용자를 표시합니다.Symfony : 폼 필터에 관한 질문

해당 목록의 세션 사용자를 숨기고 싶습니다. 어떻게 할 수 있습니까?

내 첫번째 생각 형태 각 필드, 함수, addXXXXColumnQuery()를 생성하고, 각각이 같은 라인을 추가한다 :

->andWhere("u.id <> ?", $id) 

$ ID가 현재의 유저의 ID 인 세션. 그러나 그런 식으로 나는 찾을 자신을 반복합니다.

어떻게해야합니까?

답변

2

먼저 사용자를 필터로 가져와야합니다. 양식을 인스턴스화 할 때

액션 내부 옵션으로의 USER_ID를 전달합니다 :

public function executeList(sfWebRequest $request) 
{ 
    $user_id = $this->getUser()->getUserId(); 
    $filter = new ModelFormFilter(array(), array('user_id' => $user_id)); 
    ... 

양식의 내부의 상황에서 사용자 ID를 가져옵니다 :

sfContext::getInstance()->getUser()->getUserId(); 
두 가지 옵션이 있습니다

전 청소 방법이 더 좋으며 WTFy가 적기 때문에 이전 방법을 선호합니다. 당신은 사용자 ID가 있으면

, 당신의 FormFilter의 내부에 현재 사용자 ID를 제외 doBuildQuery를 오버라이드 (override) :

protected function doBuildQuery(array $values) 
{ 
    $query = parent::doBuildQuery($values); 
    $user_id = $this->getOption('user_id'); //or off the context here 
    if ($user_id) 
    { 
    $query->addWhere('r.user_id != ?', $user_id); 
    } 

    return $query; 
}