【问题标题】:yii2 search of one grid view is affecting other gird viewsyii2 搜索一个网格视图正在影响其他网格视图
【发布时间】:2015-10-12 05:39:55
【问题描述】:

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

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

请给我解决办法。

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

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

Data Provider 的搜索/过滤是否有类似的解决方案?

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

谢谢。

【问题讨论】:

  • 将 id 添加到gridview
  • 将 id 添加到 gridview 没有帮助 @gamitg
  • 所以,为不同的gridview使用带有id的pjax。
  • 是所有的网格视图都被相同的结果替换了,还是它们都被单独过滤了,即结果不同但被搜索表单过滤了?
  • 在页面加载时,每个 gridview 都会有自己独特的数据(但列是相同的),当我尝试在特定网格中搜索时,所有其他网格也在搜索相同的内容并显示结果根据他们自己的数据。目前我已经删除了 Grid wise search 并使用 Search 表单作为所有网格的通用搜索。

标签: search yii2 dataprovider


【解决方案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]

【讨论】:

  • Beowulfenator 你明白我的意思。您的回答可能会解决我的问题,但我是 YII 的初学者,我很困惑如何用方法更改类名。但是你给了我一个提示,不同的类名会解决这个问题。谢谢你的帮助:)
  • 你不能用方法改变类名。我会更新我的答案。
【解决方案2】:

正如我在我的问题中提到的,问题是由于相同的类名(在 url 中),我对搜索模型中的所有搜索函数使用相同的类,当我尝试使用不同的类时它工作得很好:)。

谢谢。

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多