Yii2: Как отобразить имена dropDown в форме обновления / вставки также в поле зрения?

Я разрабатываю приложение в Yii2. Я сделал форму со следующей выпадающей структурой:

<!-- Konténer típus -->
<?= $form->field($model, 'kontener_tipus_id')
->dropDownList(
ArrayHelper::map(KontenerTipus::find()->AsArray()->all(), 'id',
function($model, $defaultValue) {
if ($model['tipus'] == "N") { $tipus = "Nyitott"; } else { $tipus = "Zárt"; };
if ($model['forma'] == "S") { $forma = "Szimmetrikus forma"; } else { $forma = "Aszimmetrikus forma"; };
if ($model['lancos'] == 0) { $lancos = "Láncos"; } else { $lancos = "Nem láncos"; };
if ($model['teto'] == "B") { $teto = "Billenő tetős"; } else { $teto = "Pille tetős"; };return $tipus . " - " . $forma . " - " . $lancos . " - " . $teto;
}
)
)
->label('Konténer típus');
?>

В файле просмотра «SingleView» я хочу распечатать тот же результат.

<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'kod',
'nev',
'cim',
'kihelyezes_datuma',
'lng',
'lat',
['attribute' => 'sajat', 'value' => $model->getSajat()],
//Konténer típushoz tartozó tulajdonságok megjelenítése
['attribute' => 'kontener_tipus_id', 'value' => 11]
],
]) ?>

Я пытался записать функцию в секцию значений, но она выдала мне ошибку: «Специальные символы HTML получили объектный ввод».

Как вы думаете, какой самый простой способ сделать это?

1

Решение

Функция не допускается. Но окончательное значение может быть назначено:

<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'kod',
'nev',
'cim',
'kihelyezes_datuma',
'lng',
'lat',
['attribute' => 'sajat', 'value' => $model->getSajat()],
//Konténer típushoz tartozó tulajdonságok megjelenítése
['attribute' => 'kontener_tipus_id', 'value' =>
($model['tipus']  == "N" ? "Nyitott" : "Zárt") . ' - ' .
($model['forma']  == "S" ? "Szimmetrikus forma" : "Aszimmetrikus forma") . ' - ' .
($model['lancos'] ==  0  ? "Láncos" : "Nem láncos") . ' - ' .
($model['teto']   == "B" ? "Billenő tetős" : "Pille tetős")
]
],
]) ?>

Лучшее решение:

Конечно, вы можете поместить создание строки в собственный метод модели

class KontenerTipus extends Model // or ActiveRecord....
...
public function getKonténerTípus() {
return
($this->tipus  == "N" ? "Nyitott" : "Zárt") . ' - ' .
($this->forma  == "S" ? "Szimmetrikus forma" : "Aszimmetrikus forma") . ' - ' .
($this->lancos ==  0  ? "Láncos" : "Nem láncos") . ' - ' .
($this->teto   == "B" ? "Billenő tetős" : "Pille tetős")
}
....
}

или во вспомогательной функции. Этот метод может быть повторно использован в виде:

<?= $form->field($model, 'kontener_tipus_id')
->dropDownList(
ArrayHelper::map(KontenerTipus::find()->AsArray()->all(), 'id', 'konténerTípus')
)
->label('Konténer típus');
?>

и в представлении единой модели:

DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'kod',
'nev',
'cim',
'kihelyezes_datuma',
'lng',
'lat',
['attribute' => 'sajat', 'value' => $model->getSajat()],
//Konténer típushoz tartozó tulajdonságok megjelenítése
'konténerTípus',
],
])
1

Другие решения

Других решений пока нет …