search - 在网格中为动态列制作过滤器
问题描述
在 Yii2 中,我有一个控制器,它生成一个带有一些动态列的 gridview(kartik),我必须为这些列制作过滤器,但是要为一个列做一个过滤器,我需要一个变量,其中包含 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
];
...
控制器.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 \yii\base\DynamicModel {
// ...
}
然后您可以通过这种方式动态定义属性:
$searchModel = new LojaFornecedorSearch();
// ...
foreach ($queryFornecedor as $fornecedor) {
$searchModel->defineAttribute('forn' . $fornecedor->id);
$searchModel->addRule('forn' . $fornecedor->id, 'safe');
// ...
}
推荐阅读
- canvas - 如何将风玫瑰图嵌入 GUI
- user-interface - Tkinter:小部件未应用于屏幕的右上角(网格)
- javascript - Material ui v4:我想使用类型脚本在类组件内自定义一个 Material UI 按钮。请让我知道我该怎么做?
- python - Pandas:根据列总和选择列
- scala - 在 Slick 中一次和多次调用“run.db”有什么区别吗
- laravel - 无法调用组件方法。在组件上找不到公共方法 [storeLike]:
- php - laravel rest api 有时会抛出 socket hang up 或 ECONNRESET 错误
- date-fns - MM 和 mm 有什么区别,为什么没有 DD 而不是 dd 用于 date-fns
- mysql - 如果另一个表中存在值,如何插入到表中
- ios - 主线程在swift 5中冻结后台线程操作