【问题标题】:Validate select2 in yii2在 yii2 中验证 select2
【发布时间】:2016-09-07 17:31:14
【问题描述】:

我在 _form.php 中有一个 textInput。然后,我将其更改为 select2。但是在我更改它之后,验证不起作用。有什么问题?如何在 select2 中进行验证,使其不能为空? 这是代码:

_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]
        ];
    }

【问题讨论】:

  • 你能分享你的select2代码和模型规则吗?
  • 当然。我会在我的问题上分享它。
  • 您是否能够对其他字段进行验证?客户端验证和服务器端都不适用于no_induk 吗?
  • 我可以对其他字段进行验证。 select2 正在工作,但不适用于验证。只是验证。
  • 您已经找到解决方案了吗?

标签: select2 yii2


【解决方案1】:

你可以像这样在“options”数组中设置“required = true”

'options' => ['placeholder' => 'Cari pemilik ...', 'class' => 'form-control', 'required' => true],

【讨论】:

    【解决方案2】:

    你必须把 class=> 选项中的“form-control”并删除 id,因此验证将起作用

    【讨论】:

      【解决方案3】:
      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');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        • 2017-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-06
        相关资源
        最近更新 更多