2016-04-08 10 views
1

私はYii2でアプリケーションを開発しています。Yii2:更新/挿入フォームにdropDownの名前を表示するにはどうすればいいですか?

<!-- 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の特殊文字にオブジェクト入力があります」というエラーが表示されました。

これを行う最も簡単な方法は何と思いますか?

+0

'私は、値セクションに関数を記述しようとしたが、それは私にERROR'を与えた - あなたの可能性この関数のコードを投稿しますか? –

答えて

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") 
    } 
    .... 
} 

かヘルパー関数の中にsomehwere。

<?= $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', 
    ], 
]) 
+0

ありがとう、私はあなたが与えた指示に従って、ビューファイルにいくつか変更を加えました。 – Gabesz

+0

@Gabesz私は自分の答えを更新しました。これがあなたにとって理にかなっているかどうか見てください。 – robsch

関連する問題