2012-07-19 2 views
1

Symfony 1.4에서 sfGuard 플러그인을 사용할 때 sfGuardUserProfile 필드로 어떻게 필터링합니까?sfGuard 플러그인이있는 UserProfile 필드로 필터링

제가 생각하기에 sf_guard_user_profile 테이블을 만들면 이름, 성 등의 필드를 포함 할 수 있습니다.

관리자 색인 페이지에 대한 사용자 목록이 상당히 있습니다. 사용자 이름별로 필터링 할 수 있습니다. 그러나 last_name과 같이 sf_guard_user_profile 테이블에있는 필드를 기준으로 필터링 할 수 없습니다. 나는 함께 그 양식을 제출할 때

filter: 
    class: sfGuardUserProfileFormFilter 

하지만 : 나는 변경하여 페이지에있는 양식에 표시 할 필드를 얻을 수

generator: 
    class: sfPropelGenerator 
    param: 
    model_class: sfGuardUser 

    config: 
     list: 
     display: [=username, first_name, last_name, last_login, role] 
     batch_actions: [] 

     filter: 
     display: [username] 

     form: 
     class: myGuardUserAdminForm 

처럼

내 generator.yml 보인다 last_name의 유효한 값. 필터링하지 않습니다. 모든 레코드가 반환됩니다.

답변

1

필터 클래스로 sfGuardUserProfileFormFilter을 추가하는 것이 first_name, last_name 및 기타 프로필 필드를 필터링하는 올바른 방법이 아닙니다. 마지막으로 추가

public function configure() 
{ 
    parent::configure(); 

    $this->mergeForm(new sfGuardUserProfileFormFilter()); 
} 

:

filter: 
    display: [username, first_name, last_name] 

그런 다음 당신이 sfGuardUserProfileFormFiltersfGuardUserFormFilter에 병합 할 수 있습니다

대신에 당신은 당신이 좋아하는 필터 표시 목록에서 필터링 할 필요가, 필드를 추가해야 sfGuardUserFormFilter에 필터링 할 병합 된 양식 sfGuardUserProfileFormFilter의 각 필드에 대해 addMyFieldColumnCriteria (Propel 표기) 함수를 사용합니다. first_name의 경우 :

protected function addFirstNameColumnCriteria(Criteria $criteria, $field, $values) 
    { 
     if (!is_array($values)) 
      return; 

     $criteria->addJoin(sfGuardUserPeer::ID, sfGuardUserProfilePeer::USER_ID, Criteria::INNER_JOIN); 

     if (isset($values['is_empty']) && $values['is_empty']) 
     { 
      $criteria->add($field, null, Criteria::ISNULL); 
      $criteria->addOr($field, '', Criteria::EQUAL); 
     } 
     else 
     { 
      $value = $values['text']; 
      if ($value == '') 
       return; 
      $criteria->add($field, '%'.$value.'%', Criteria::LIKE); 
     } 
    } 
관련 문제