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

yii2 search of one grid view is affecting other gird views

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

在它调用 Pjax 之前一切都很好,但在某些情况下(我不知道确切)页面正在刷新并且搜索应用于所有网格视图(这就是问题所在)。

请给我解决方案。

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

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

Data Provider的search/filter是否有类似的解决方案?

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

谢谢。

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

您应该在模型中定义自己的 formName() 方法。默认情况下,它是 returns class 名称。对于您来说,您使用的每个模型实例应该 return 不同的名称。这样你会得到类似ProductSearch1[description]ProductSearch2[description]等的东西

我建议您在 class 中定义一个 public 变量(例如 formName),在创建模型实例时对其进行初始化,然后 return在 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]

正如我在问题中提到的,问题是由于相同的 class 名称(在 url 中),我对所有搜索功能使用了相同的 class在搜索模型中,当我尝试使用不同的 classes 时,它工作得很好 :).

谢谢。