如何使yii2中表单字段小部件的值(待读取)与用户在输入文本框中看到的值不同



我正在修改一个已经在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')

相关内容

  • 没有找到相关文章

最新更新