在 yii2 中验证 select2
Posted
技术标签:
【中文标题】在 yii2 中验证 select2【英文标题】:Validate select2 in yii2 【发布时间】: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 正在工作,但不适用于验证。只是验证。
您已经找到解决方案了吗?
【参考方案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');
【讨论】:
以上是关于在 yii2 中验证 select2的主要内容,如果未能解决你的问题,请参考以下文章