forms - 如何使yii2中表单字段小部件的值(要读取)与用户在输入文本框中看到的不同
问题描述
我正在修改已经在 yii2 框架中开发的系统。
有一个功能,用户可以查看客户列表,并且针对每条记录都有一个用于编辑的按钮。单击时,会显示一个表单,其中会自动为单击“编辑”按钮的客户填写值。现在,这是一个地址字段,其中填充了地址的数据库记录 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, 'village')->widget(\kartik\widgets\Select2::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(\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, 'village')->widget(\kartik\widgets\Select2::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')
推荐阅读
- android - Admob、Adsense 地址(PIN)验证问题
- unity3d - 更改时网格变黑
- java - JUnit 测试抛出 NullPointerException
- ios - 未触发领域模式迁移块
- xss - JavaScript 上下文中的 XSS 编码
- javascript - 有没有办法在我自己的 css 声明中连接现有的 Tailwind 类?
- swiftui - 如何在 SwiftUI 中的视图和子视图之间共享变量
- csv - 使用 Trino(以前称为 PrestoDB)将非 varchar 数据导出到 CSV 表
- list - “我可以在一个 sml 函数中写 2 条指令吗?
- python - Python:子数组成一个数组-> Numpy