2015-01-04 10 views
15

dla mojej listy rozwijanej używam tego kodu.yii2: lista rozwijana dla wielu wartości konkat w jednej linii

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

Otrzymuję listę rozwijaną, jak na zdjęciu. Ale chcę, aby był łączony przez myślnik (-) w jednej linii. Jak mogę to zrobić?

medicine-request-drop-down

Odpowiedz

35

ArrayHelper::map($array, $from, $to, $group) wykorzystuje ArrayHelper::getValue() do uzyskania wartości $from, $to i $group. ArrayHelper::getValue() pozwala przekazywać zamknięcia.

Podpis anonimowy funkcji powinien być: function($array, $defaultValue).

Jako takie można ustawić $to jak

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

Chociaż pozostanę przy moim rozwiązaniu, ponieważ można z niego korzystać w wielu miejscach z jedną deklaracją. Ale dobrze wytłumaczyłeś właściwy sposób robienia tego, przyjmuję twoją odpowiedź. – Pawan

+1

Model $ powinien być tablicą, a nie obiektem. Tak więc zwraca $ model ['nazwa_medycyki'] .'- '. $ Model [' medicine_id ']; –

+1

@DiegoBetto dziękuję. W celu późniejszego odniesienia możesz samodzielnie edytować odpowiedź, aby ją poprawić. – topher

1

Ok znalazłem rozwiązanie. Będę wdzięczny, jeśli pojawi się lepsze rozwiązanie.

Stworzyłem funkcję w modelu Medicine.php

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

a następnie w arrayhelper zastąpiony medicine_name z medicineName i teraz jestem coraz czego szukałem.

1

Funkcja anonimowy może być

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

Można sprawdzić here!

Powiązane problemy