问题描述
有一个功能,用户可以在其中查看客户列表,并且针对每条记录都有一个用于编辑的按钮。单击时,将显示一个表单,其中会为单击“编辑”按钮的客户自动填写值。 现在,这是一个地址字段,其中填充了地址的数据库记录 ID,而不是位置的名称。 id 是一个数字,并且在单击“更新”按钮时验证该字段以检查该值是否为数字。
问题: 用户要求我使用不是数字的位置名称填充该字段,而不是用数字(即 ID)填充该字段,因此将违反验证规则。
我希望能够将输入字段的值(即 value 属性)设为 id -a 数字,这样它就不会违反设置规则 - 但在文本输入中显示位置名称以便用户查看可读的“价值”。
我怎样才能做到这一点?
代码 有这个:
<div class="col-sm-6">
<?= $form->field($model,'village')->widget(\kartik\widgets\Select2::classname(),[
'options' => ['value' =>$model->village],'pluginoptions' => [
'allowClear' => true
],]); ?>
</div>
$model->village 中的值是村庄的 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,[
'options' => ['value' => $villageName['village'],'id' => $model->village],]); ?>
</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(\kartik\widgets\Select2::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,[
'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(),'village_name')