Сделать фильтр в сетке для динамических столбцов - PullRequest
0 голосов
/ 28 марта 2019

В 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

i 'Я застрял в этой точке.

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Вы можете использовать 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');
    // ...
}
0 голосов
/ 30 марта 2019

добро пожаловать в 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...