symfony 过滤器的附加条件

Posted

技术标签:

【中文标题】symfony 过滤器的附加条件【英文标题】:Additional criteria to symfony filter 【发布时间】:2011-09-28 11:53:33 【问题描述】:

我正在做一个 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');
 

*注意:下面提到的“场景”是代码中的场景

非常感谢您的宝贵时间

【问题讨论】:

您可以发布用于列出您的项目的操作 executeIndex 吗? 由于我要过滤的变量是过滤表的一个字段,这可以通过为该字段添加一个小部件来完成,并且以某种方式指定一个作为参数给出的值(不可更改)。跨度> 【参考方案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');
 

【讨论】:

我正在阅读您的帖子。很高兴听到您解决了问题!

以上是关于symfony 过滤器的附加条件的主要内容,如果未能解决你的问题,请参考以下文章

向 eloquent 资源添加过滤器以有条件地附加关系

带有附加左表过滤器的左连接性能

Symfony2 - 使用没有附加任何实体的表单生成器

如何在 Symfony 中添加 Doctrine 过滤器?

Symfony2 中的 Twig CamelCase 过滤器

Doctrine 和 symfony 过滤器,调试过滤器