在网格中为动态列创建过滤器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在网格中为动态列创建过滤器相关的知识,希望对你有一定的参考价值。
在Yii2中,我有一个生成带有一些动态列的gridview(kartik)的控制器,我必须为这个列做过滤器,但是为了对列进行过滤我需要一个在searchModel中具有该列名称的变量和一个条目在具有该名称的规则数组中,如何做到这一点,因为我的列是在控制器中动态生成的?
我已经尝试使用数组作为变量,键作为列的名称,但我不知道如何使用规则在searchModel中使用数组。
searchModel.php
...
public $loja_cnpj;
public $loja_nome;
public $forn_status;
// public $forn10420318; <- this need to be generate dynamically
public function rules()
{
return [
[['id', 'empresa_id', 'grupo_loja_id', 'status', 'numero_checkout',
'numero_funcionarios', 'loja_id'], 'integer'],
// [['nome', 'telefone', 'empresa','grupo_loja', 'email', 'cnpj',
'loja_nome', 'loja_cnpj', 'forn10420318'], 'safe'],
[['nome', 'telefone', 'empresa','grupo_loja', 'email', 'cnpj',
'loja_nome', 'loja_cnpj', 'forn_status["forn10420318"]'], 'safe'],
[['area_venda', 'tamanho_loja'], 'number'],
['forn_status', 'each', 'rule' => ['safe']], <- i'm stuck here
];
...
Controller.php这样
...
$searchModel = new LojaFornecedorSearch();
...
foreach($queryFornecedor as $fornecedor){
$colTemp = array([
'attribute' => 'forn'.$fornecedor->id,
'label' => 'forn'.$fornecedor->id,
'value' => function($model)use($fornecedor)... <- dynamic columns array to be inserted in gridView
我陷入了困境。
答案
您可以在这种情况下使用DynamicModel
。首先,从LojaFornecedorSearch
扩展DynamicModel
:
class LojaFornecedorSearch extends yiiaseDynamicModel {
// ...
}
然后,您可以通过以下方式动态定义属性:
$searchModel = new LojaFornecedorSearch();
// ...
foreach ($queryFornecedor as $fornecedor) {
$searchModel->defineAttribute('forn' . $fornecedor->id);
$searchModel->addRule('forn' . $fornecedor->id, 'safe');
// ...
}
另一答案
欢迎来到stackoverflow
我认为你可以做rule()并添加__construct()方法。
见打击:
function __construct(){
// setting attributes
$this->{$varname};
}
并将规则更改为:
public function rules()
{
$default_rules = [
[['id', 'empresa_id', 'grupo_loja_id', 'status', 'numero_checkout',
'numero_funcionarios', 'loja_id'], 'integer'],
// and whatever rule you have
];
$new_rules = [
['Your_dynamic_var', 'safe']
];
return array_merge($default_rules,$new_rules);
}
以上是关于在网格中为动态列创建过滤器的主要内容,如果未能解决你的问题,请参考以下文章
穿梭列上的 Oracle APEX 交互式网格过滤器 APEX 19.2