簡體   English   中英

yii2:在一行中連接多個值的下拉列表

[英]yii2:drop-down list for multiple values concat in one line

對於我的下拉列表,我正在使用此代碼。

<?= $form->field($medicinerequest, '[' . $id . ']' . 'medicine_name')
->DropDownList(ArrayHelper::map(\app\models\Medicine::find()
->asArray()->all(), 'id', 'medicine_name','medicine_id' ),
[ 'prompt' => 'Please Select' ])?> 

我得到如圖所示的下拉列表。 但我希望它在一行中由連字符(-)連接起來。 我怎樣才能做到這一點?

葯物請求下拉

ArrayHelper::map($array, $from, $to, $group)使用ArrayHelper::getValue()獲取$from$to$group ArrayHelper::getValue()允許你傳遞閉包。

匿名函數簽名應該是: function($array, $defaultValue)

因此,您可以將$to設置為

ArrayHelper::map(
    \app\models\Medicine::find()->asArray()->all(),
    'id',
    function($model) {
        return $model['medicine_name'].'-'.$model['medicine_id'];
    }
)

好的,我找到了解決方案。 如果有更好的解決方案,我會歡迎。

我在模型 Medicine.php 中創建了一個函數

public function getMedicineName(){
        return $this->medicine_name .'-'.$this->medicine_id;
    }

然后在 arrayhelper 中用medicineName 替換了medicine_name,現在我得到了我想要的東西。

匿名函數可以是

function ($element) {
   return $element['medicine_name'] . '-'. $element['medicine_id'];
}

你可以在這里查看

您可以在 kartik Depdrop 小部件中設置$var ,與此處的 Dropdown 小部件中的場景相同 我們使用 kartik depdrop 小部件

<?php

        $var = ArrayHelper::map(Modelname::find()->where(['id' => $model->customer_id])->all(), 'id',
            function ($model) {
                return $model['id'] .' - '. $model['name'];
            });
        echo $form->field($model, 'id')->widget(DepDrop::classname(), [
            'data' => $var,
            'pluginOptions' => [
                'depends' => [''],
                'url' => Url::to(['#'])
            ]
        ]) ?>

或者,您可以從控制器 esp 中為相關下拉列表填充它; 您返回具有從模型字段連接的值的鍵=> 值對。

echo "<option value='".$model->id."'>"
.$model->field1.' '
.$modle->field2.' '.$model->field3."</option>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM