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 时,它工作得很好 :).
谢谢。
我在索引页中有多个网格视图,每个网格视图(例如:待处理记录网格视图、已完成记录网格视图、已取消记录网格视图,...)具有相同的列(例如:名称、编号、位置, ... ) 并且它们每个都有自己的 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 时,它工作得很好 :).
谢谢。