答案 0 :(得分:3)
您尚未提供用于下拉列表的模型的任何详细信息,因此我将使用Phone
模型演示示例,字段为id
,phone
,{{ 1}},只是为了理解。
这是area_code
表的数据:
phone
现在,如果您从数据库中选择一行并尝试列出+----+-------------+-----------+
| id | phone | area_code |
+----+-------------+-----------+
| 1 | 03214442021 | 021 |
| 2 | 03214452520 | 051 |
+----+-------------+-----------+
内单行中的所有columns
,则可以使用drop-down
过滤掉所有将array_filter
放入数组中,然后将该数组分配给attributes
选项。
虽然您可以使用相同的方法并在drop-down
内使用array_filter
,但如果从表中选择所有行,则差异将是下拉列表的布局。
选择单行时,您将获得如下所示的下拉列表:
如果您从表中选择所有行,则下拉列表将如下所示:
在您的控制器中,您可以执行以下操作:
foreach
public function actionPhone($id){
$model = Phone::findOne($id);
$rows = array_filter($model->attributes);
return $this->render('drop-down', ['rows' => $rows]);
}
对于上述两种情况,视图部分保持不变,在您创建下拉列表的视图中,将行分配给选项。
您可以使用public function actionPhone(){
$phone = Phone::find()->all();
foreach ($phone as $model) {
$rows[] = array_filter($model->attributes);
}
return $this->render('drop-down', ['rows' => $rows]);
}
或yii\helpers\Html
建立下拉列表。
ActiveForm
注意:下拉选项<?= yii\helpers\Html::dropDownList('my-options',null,$rows) ?>
是text
的值,下拉选项column
是列value
。表示下拉列表name
中的第一个选项['id'=>1]
将是值,id
将是为该选项显示的文字。
如果您需要使用选项和文本的值,您可能需要使用\yii\helpers\ArrayHelper::map()
,您可以将闭包传递给1
,$from
表示匿名函数您可以将列值设为$to
和key
,如下所示:
value
因此,请将您的操作更改为以下内容:
Array(
[1]=>1,
[03214442021]=>03214442021 ,
[021]=>021
)