2010-07-09 6 views
1

Dans le frontend J'ai une page avec une liste et un filtre de forme à côté de lui qui montre tous les utilisateurs d'un réseau social.Symfony: question sur les filtres de formulaire

Je voudrais cacher l'utilisateur de la session dans cette liste. Comment puis-je faire ?

Ma première pensée est la création d'une fonction, addXXXXColumnQuery(), pour chaque champ du formulaire , et chacun ajouter une ligne comme celle-ci:

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

$ id étant l'ID de l'utilisateur du courant session. Mais de cette façon, je trouve que je me répète.

Que dois-je faire?

Répondre

2

D'abord, vous devez placer l'utilisateur dans le filtre. Vous avez deux options:

passer le user_id en tant qu'option lorsque vous instancier la forme, à l'intérieur de l'action:

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

obtenir l'ID utilisateur du contexte à l'intérieur de la forme:

sfContext::getInstance()->getUser()->getUserId(); 

Je préfère la première méthode parce qu'elle est plus propre et moins WTFy.

Une fois que vous avez l'ID utilisateur, passer outre doBuildQuery pour exclure l'ID utilisateur courant à l'intérieur de votre FormFilter:

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; 
} 
Questions connexes