Дополнительные критерии к фильтру symfony

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

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

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

Итак, моя проблема здесь:

Я разработал список сущностей элементов, используя класс 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 в коде.

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


person Andreu Ramos    schedule 28.09.2011    source источник
comment
Не могли бы вы опубликовать действие executeIndex, используемое для перечисления ваших элементов?   -  person macgyver    schedule 28.09.2011
comment
Поскольку переменная, которую я хочу отфильтровать, является полем отфильтрованной таблицы, это можно сделать, добавив виджет для поля и каким-то образом указав значение (неизменяемое), указанное в качестве параметра.   -  person Andreu Ramos    schedule 29.09.2011


Ответы (1)


Я решил проблему. Проблема заключалась в том, что я присвоил критерии, сгенерированные formfilter, своим критериям 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');
 }
person Andreu Ramos    schedule 29.09.2011
comment
Я читаю твой пост прямо сейчас. Рад слышать, что вы решили проблему! - person macgyver; 29.09.2011