2016-05-12 9 views
1

Ich habe eine textInput in _form.php. Dann ändere ich es select2. Aber nachdem ich es geändert habe, funktioniert die Validierung nicht. Was ist das Problem? Wie kann ich eine Validierung in select2 vornehmen, so dass sie nicht leer sein kann? Dieser ist der Code:Validate select2 in 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'); 
    ?> 

und das ist mein Modell Regeln:

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

können Sie Ihren Select2-Code und Modell teilen Regeln? –

+0

Natürlich. Ich werde es auf meine Frage teilen. – RiefSapthana

+0

Konnte die Validierung für andere Felder durchgeführt werden? sind beide clientseitige Validierung und Server-Seite funktioniert nicht für 'no_induk'? –

Antwort

0

Sie class => "Form-control" in Ihre Optionen zu setzen haben und entfernen ID, so wird die Validierung

+0

Wie zur Implementierung? Gib mir ein Beispiel, ich will auch zu deiner Beschreibung .. – 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');