Yii2:如何在 update/insert 表单中显示下拉名称?
Yii2: How to display dropDown names in update/insert form also in view?
我正在用 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 special chars got an object input"。
您认为最简单的方法是什么?
函数不被允许。但是最后可以赋值:
<?= 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',
],
])
我正在用 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 special chars got an object input"。
您认为最简单的方法是什么?
函数不被允许。但是最后可以赋值:
<?= 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',
],
])