在Yii2中,我有一个控制器,该控制器会生成带有一些动态列的gridview(kartik),我必须为此列创建过滤器,但是要对列进行过滤,我需要在searchModel中使用具有该列名称的变量以及规则数组中也有该名称的条目,该怎么做,因为我的列是在控制器中动态生成的?
我已经尝试过使用数组作为变量,以键作为列的名称,但是我不知道如何在带有规则的searchModel中使用数组。
searchModel.php
#include<stdio.h>
int main()
{
int _a;
char _b;
printf("Zadaj cislo od 0 do 15: ");
scanf_s("%d",&_a);
asm(".intel_syntax noprefix \n"
"mov eax, _a \n"
"mov ecx, 9 \n"
"cmp eax,ecx \n"
"jg vacsie \n "
"jl mensie \n"
"mensie: \n"
"add eax, '0' \n"
"jmp end"
"vacsie: \n"
"add eax,55 \n"
"end:"
"mov _b,al"
".att_syntax \n"
);
if (_a<=15 && _a>0)
printf("v hexa %c \n",_b);
else printf("cislo nieje spravne");
getchar();
return 0;
}
controller.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
];
...
我现在被困住了。
答案 0 :(得分:0)
在这种情况下,您可以使用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');
// ...
}
答案 1 :(得分:-1)
欢迎来到stackoverflow
我认为您可以 rules()并添加 __ 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);
}