我正在修改一个已经在yii2框架中开发的系统。
有一个功能,用户可以查看客户列表,每个记录都有一个编辑按钮。单击时,将显示一个表单,其中包含为单击"编辑"按钮的客户自动填写的值。现在,是一个地址字段,其中填充的是地址的数据库记录id,而不是位置的名称。id是一个数字,当单击"更新"按钮时,验证该字段以检查该值是否为数字。
问题:用户要求我用不是数字的位置名称来填充该字段,而不是用数字(即id(来填充字段,这将违反验证规则。
我希望能够使输入字段的值(即值属性(是id-一个数字,这样它就不会违反设置规则-但在文本输入中显示位置的名称,这样用户就可以看到可读的"值"。
我怎样才能做到这一点?
代码有这样的:
<div class="col-sm-6">
<?= $form->field($model, 'village')->widget(kartikwidgetsSelect2::classname(), [
'options' => ['value' =>$model->village],
'pluginOptions' => [
'allowClear' => true
],
]); ?>
</div>
$model中的值->村庄是村庄的id。这是用户不希望看到的。
我试过这样做:
<div class="col-sm-6">
<?php
$villageName = Yii::$app->db->createCommand('SELECT village_name FROM v_village WHERE id='.$model->village)->queryOne();
$streetName = Yii::$app->db->createCommand('SELECT street FROM v_street WHERE street_id='.$model->street)->queryOne();
?>
<?= $form->field($model, 'village')->widget(kartikwidgetsSelect2::classname(), [
'options' => ['value' => $villageName['village'], 'id' => $model->village],
'pluginOptions' => [
'allowClear' => true
],
]); ?>
</div>
但这违反了验证规则,我得到的错误是"村庄必须是一个数字">
您必须设置所选的数据数组。
<div class="col-sm-6">
<?php
$villageName = Yii::$app->db->createCommand('SELECT village_name FROM v_village WHERE id='.$model->village)->queryOne();
$streetName = Yii::$app->db->createCommand('SELECT street FROM v_street WHERE street_id='.$model->street)->queryOne();
?>
<?= $form->field($model, 'village')->widget(kartikwidgetsSelect2::classname(), [
'data' => [$model->village => $villageName['village']],
'pluginOptions' => [
'allowClear' => true //are you sure you want to be able to clear the option? If you save it empty the query above will break
],
]); ?>
</div>
我不确定你的目的是什么,但如果你只有这个值,你可以把它像文本一样显示出来。
如果你想改变村庄,你的代码必须是这样的:
<?= $form->field($model, 'village')->widget(kartikwidgetsSelect2::classname(), [
'data' => ArrayHelper::map(Village::find()->all(), 'id', 'village_name'),
'pluginOptions' => [
'allowClear' => true //are you sure you want to be able to clear the option? If you save it empty the query above will break
],
]); ?>
您还可以删除查询并设置如下数据:
'data' => ArrayHelper::map(Village::find()->where(['id' => $model->village])->all(), 'id', 'village_name')