Дополнительные критерии к фильтру Symfony - PullRequest
0 голосов
/ 28 сентября 2011

Я работаю над проектом Symfony для управления базой данных.Сначала я объясню, как это работает:

В базе данных все элементы связаны с уникальным элементом 'scene'.Когда пользователь получает доступ к приложению, выбирает, какую сцену он хочет видеть (это сохраняется в параметре пользователя).Поэтому при перечислении элементов приложение должно перечислять только элементы, связанные со сценой, выбранной пользователем.

* Примечание: все элементы имеют атрибут сцены в определении таблицы.

Так что моя проблема возникаетздесь:

Я разработал список сущностей элементов, используя для разбивки на страницы класс sfPropelPager.Также добавлены некоторые фильтры для поиска в списке, и для этого я использовал систему фильтров, предоставленную Symfony (<element>FormFilter.class.php и прочее).

Теперь я хочу, чтобы в списке не отображались элементы из других сцен, кроме выбранных пользователем.

Как я могу добавить дополнительные критерии к критериям, заданным классом фильтра?или Как бы вы решили проблему?

вот мой код действия:

  public function executeUnidadfilter(sfWebRequest $request){
    $this->filter = new BaUnidadorganizativaTblFormFilter();
    $c = $this->filter->getCriteria();
    $this->filter->bind($request->getParameter($this->filter->getName()));
    if($this->filter->isValid()){
      $this->pager = new sfPropelPager('BaUnidadorganizativaTbl',$this->sfPropelPagerLines);
      echo $this->getUser()->getEscenario();
      $this->pager->setCriteria($c);
      $this->pager->init();
   }else{
      $this->pager = new sfPropelPager('BaUnidadorganizativaTbl',$this->sfPropelPagerLines);
      $this->pager->init();
   }
   $this->setTemplate('Unidadlist');
 }

* Примечание: «сцена», упомянутая ниже, - это Escenario в коде

спасибоочень за ваше время

1 Ответ

0 голосов
/ 29 сентября 2011

Я решил проблему.Проблема заключалась в том, что я назначил критерии, сгенерированные форм-фильтром, моим критериям var До того, как фильтр был заполнен.Вот почему ошибки.

Полученный код таков:

  public function executeUnidadfilter(sfWebRequest $request){
    $this->filter = new BaUnidadorganizativaTblFormFilter();
    $this->filter->bind($request->getParameter($this->filter->getName()));
    if($this->filter->isValid()){
        $this->pager = new sfPropelPager('BaUnidadorganizativaTbl',$this->sfPropelPagerLines);
        $esc = $this->getUser()->getEscenario();
        $c = new Criteria();
        $c = $this->filter->getCriteria();
        $c->addAnd('codigo_escenario',$esc);
        $this->pager->setCriteria($c);
        $this->pager->init();
    }else{
        $this->pager = new sfPropelPager('BaUnidadorganizativaTbl',$this->sfPropelPagerLines);
        $this->pager->setCriteria($this->filter->getCriteria());
        $this->pager->init();
    }
    $this->message=null;
    $this->messageType=null;
    $this->setTemplate('Unidadlist');
 }
...