2016-05-12 4 views
1

У меня есть textInput в _form.php. Затем я меняю его на select2. Но после того, как я его изменил, проверка не работает. В чем проблема? Как я могу сделать валидацию в select2, чтобы она не могла быть пустой? Это код:Подтвердить select2 в yii2

_form.php

<?php 

     $formatJs = <<< 'JS' 
     var formatPenerima = function (penerima) { 
      if (penerima.loading) { 
       return penerima.text; 
      } 
      var markup = 
      '<div class="row">' + 
       '<div class="col-sm-4">' + 
        '<b style="margin-left:5px">' + penerima.text + '</b>' + 
       '</div>' + 
       '<div class="col-sm-3"><i class="fa fa-phone"></i> ' + penerima.telepon + '</div>' + 
       '<div class="col-sm-4"><i class="fa fa-envelope"></i> ' + penerima.mail + '</div>' + 
      '</div>'; 
      return '<div style="overflow:hidden;">' + markup + '</div>'; 
     }; 
     var formatPenerimaSelection = function (penerima) { 
      return penerima.id || penerima.text; 
     } 
JS; 

     // Register the formatting script 
     $this->registerJs($formatJs, \yii\web\View::POS_HEAD); 

     // Script to parse the results into the format expected by Select2 
     $resultsJs = <<< JS 
     function (data, params) { 
      params.page = params.page || 1; 
      return { 
       results: data.results, // check here 
       /*pagination: { 
        more: (params.page * 30) < data.total_count 
       }*/ 
      }; 
     } 
JS; 

     $url = Url::to(['/paket/jsonlist']); 

     // Render your widget 
     // Get data from dummy data 
     echo $form->field($model, 'no_induk')->widget(Select2::className(), [ 
      'name' => 'kv-repo-template', 
      'value' => '', 
      'initValueText' => '', 
      'options' => ['placeholder' => 'Cari pemilik ...', 'id' => 'pengambil'], 
      'pluginOptions' => [ 
       'allowClear' => true, 
       'minimumInputLength' => 1, 
       'ajax' => [ 
        'url' => $url, 
        'dataType' => 'json', 
        'delay' => 250, 
        'data' => new JsExpression('function(params) { return {q:params.term, page: params.page}; }'), 
        'processResults' => new JsExpression($resultsJs), 
        'cache' => true 
       ], 
       'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 
       'templateResult' => new JsExpression('formatPenerima'), 
       'templateSelection' => new JsExpression('formatPenerimaSelection'), 
      ], 
     ])->label('Pemilik'); 
    ?> 

и это моя модель правила:

public function rules() 
    { 
     return [ 
      [['no_induk', 'nama', 'no_telepon', 'email', 'kategori_paket', 'nama_pengirim'/*, 'tanggal_sampai'*/], 
       'required', 'message' => '{attribute} tidak boleh kosong.'], 
      [['id_satpam_pengentry'], 'required', 'message' => 'Nama satpam tidak boleh kosong.'], 
      [['kategori_paket', 'status', 'id_satpam_pengentry', 'id_satpam_penyetuju'], 'integer'], 
      [['tanggal_sampai', 'tanggal_pengambilan'], 'safe'], 
      [['no_induk', 'email'], 'string', 'max' => 255], 
      [['nama', 'nama_pengirim', 'nama_pengambil'], 'string', 'max' => 128], 
      [['no_telepon'], 'string', 'max' => 64] 
     ]; 
    } 
+0

Вы можете поделиться своим кодом и моделью select2 правила? –

+0

Конечно. Я поделюсь этим вопросом. – RiefSapthana

+0

Возможно ли выполнить проверку для других полей? как проверка на стороне клиента, так и серверная сторона не работает для 'no_induk'? –

ответ

0

вы должны поставить класс => "форм-контроль" в настройках и удалите идентификатор, поэтому проверка будет работать

+0

Как реализовать? Дайте мне пример, я хочу также ваше описание .. – CrashBurn

0
echo $form->field($model, 'no_induk')->widget(Select2::className(), [ 
     'name' => 'kv-repo-template', 
     'value' => '', 
     'initValueText' => '', 
     'options' => ['placeholder' => 'Cari pemilik ...', 'class' => 'form-control'], 
     'pluginOptions' => [ 
      'allowClear' => true, 
      'minimumInputLength' => 1, 
      'ajax' => [ 
       'url' => $url, 
       'dataType' => 'json', 
       'delay' => 250, 
       'data' => new JsExpression('function(params) { return {q:params.term, page: params.page}; }'), 
       'processResults' => new JsExpression($resultsJs), 
       'cache' => true 
      ], 
      'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 
      'templateResult' => new JsExpression('formatPenerima'), 
      'templateSelection' => new JsExpression('formatPenerimaSelection'), 
     ], 
    ])->label('Pemilik'); 
Смежные вопросы