yii2搜索一个网格视图正在影响其他网格视图

时间:2015-10-12 05:39:56

标签: search yii2 dataprovider

我在索引页面中有多个网格视图,每个网格视图(例如:待处理记录网格视图,完成记录网格视图,取消记录网格视图,...)具有相同的列(例如:名称,编号,位置,。 ..)并且每个人都有自己的搜索/过滤行,每个网格视图都在进行Pjax调用。

在进行Pjax调用之前,每件事都很好,但在某些情况下(我不确切知道)页面是刷新的,搜索适用于所有网格视图(这是问题)。

请给我解决方案。

我之前的问题是,每个网格视图也都有分页,当我用来点击一个网格视图的分页时它也影响了另一个网格视图的分页,解决方法是,我使用了不同的pageParam:

'pagination' => [
    'pageParam' => 'ConfirmedPackage',
],

是否有类似的搜索/过滤数据提供商的解决方案?

在页面重新加载后,它在网址中使用相同的类名来搜索网格。

谢谢。

2 个答案:

答案 0 :(得分:1)

正在发生的事情的原因是您为所有搜索模型使用相同的类。反过来,这会导致过滤字段具有相同的名称,如ProductSearch[description]。幸运的是,有一个解决方案。

您应该在模型中定义自己的formName()方法。默认情况下,它返回类名。对于您来说,它应该为您正在使用的每个模型实例返回不同的名称。通过这种方式,您可以获得ProductSearch1[description]ProductSearch2[description]等内容。

我建议您在类中定义一个公共变量(例如formName),在创建模型实例时对其进行初始化,然后在formName()方法中返回。

这是一个具体的例子。

class ProductSearch extends ProductSearch
{
    public $formName = null;

    public function formName()
    {
        if (null == $this->formName) {
            return parent::formName();
        } else {
            return $this->formName;
        }
    }

    //other class attributes and methods
}

以下是您使用此模型的方法:

$model1 = new ProductSearch();
//will generate default names like ProductSearch[somefield]

$model2 = new ProductSearch(['formName' => 'MyProductForm']);
//will generate names like MyProductForm[somefield]

$model3 = new ProductSearch();
$model3->formName = 'MyProductForm';
//a different way to initialize the model
//will also generate names like MyProductForm[somefield]

答案 1 :(得分:0)

正如我在问题中提到的那样,问题是由于相同的类名(在url中),我在搜索模型中使用了相同的类来查找所有搜索函数,当我尝试使用不同的类时,它完美地工作了:)

谢谢。