web-dev-qa-db-fra.com

yii2: liste déroulante pour plusieurs valeurs concaténées sur une ligne

pour ma liste déroulante, j'utilise ce code.

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

Je reçois la liste déroulante comme dans l'image. Mais je veux qu'il soit concaténé par un trait d'union (-) sur une ligne. Comment puis-je faire ceci?

medicine-request-drop-down

20
Pawan

ArrayHelper::map($array, $from, $to, $group) utilise ArrayHelper::getValue() pour obtenir les valeurs de $from, $to et $group. ArrayHelper::getValue() vous permet de passer les fermetures.

La signature de fonction anonyme doit être: function($array, $defaultValue).

En tant que tel, vous pouvez définir $to comme 

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

Ok j'ai trouvé la solution. J'accueillerai s'il y a une meilleure solution.

J'ai créé une fonction dans le modèle Medicine.php

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

et alors dans la rangée helper remplacé medicine_name avec medicineName et maintenant je reçois ce que je cherchais.

1
Pawan

La fonction anonyme pourrait être

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

Vous pouvez vérifier ici !

1
Sergio Rosales

Vous pouvez définir $var dans le widget kartik Depdrop, comme le même scénario dans le widget Dropdown ici. Nous utilisons le widget 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(['#'])
            ]
        ]) ?>