2015-02-03 9 views
8

Ich habe eine Tabelle mit dem Namen Play und zeige Details zu jedem Datensatz im Yi2-Detailansicht-Widget an. Ich habe ein Attribut in dieser Tabelle recurring, die vom Typ Tinyint ist, kann es 0 oder 1 sein. Aber ich möchte es nicht als eine Zahl anzeigen, stattdessen möchte ich oder no basierend auf dem Wert (0 oder 1).Wert eines Attributs im DetailView-Widget ändern

Ich versuche, dass mit einer Funktion in Detail Widget zu ändern, aber ich erhalte eine Fehlermeldung: Object of class Closure could not be converted to string

Mein Detailansicht Code:

<?= DetailView::widget([ 
    'model' => $model, 
    'attributes' => [ 
     'name', 
     'max_people_count', 
     'type', 
     [ 
      'attribute' => 'recurring', 
      'format'=>'raw', 
      'value'=> function ($model) { 
         if($model->recurring == 1) 
         { 

          return 'yes'; 

         } 
         else { 
         return 'no'; 
         } 
         }, 
     ], 
     'day', 
     'time', 
     ... 

Jede mögliche Hilfe würde geschätzt!

+0

Aus einer ähnlichen Frage entnommen: [Closures in DetailView] (http://stackoverflow.com/questions/39266846/assigning-function-to-value-attribute-in-details-view-yii2/39299638#39299638) – MacGyer

Antwort

13

Versuchen

'value' => $model->recurring == 1 ? 'yes' : 'no' 
+0

Das hat den Trick, vielen Dank! – vrt1515

14

Im Gegensatz zu GridView, die einen Satz von Modellen verarbeitet, DetailView Prozesse nur eine. Es ist also nicht notwendig, den Verschluss zu verwenden, da $model das einzige Modell zur Anzeige ist und in der Ansicht als Variable verfügbar ist.

Sie können auf jeden Fall solution von rkm vorgeschlagen vorschlagen, aber es gibt einfachere Option.

Durch die Art und Weise Sie erhalten ein wenig zu vereinfachen, da die zulässigen Werte sind nur 0 und 1:

'value' => $model->recurring ? 'yes' : 'no' 

Wenn Sie nur Wert als boolean angezeigt werden soll, können Sie Formatierer Suffix mit Doppelpunkt hinzufügen:

'format' => 'raw' ist hier redundant, weil es nur Text ohne HTML ist.

Wenn Sie mehr Optionen wollen hinzufügen, können Sie diese verwenden:

[ 
    'attribute' => 'recurring', 
    'format' => 'boolean',  
    // Other options 
], 

Mit Formatierer ist flexibler Ansatz, da diese Etiketten werden je nach Anwendungssprache in Konfig erzeugt werden.

Offizielle Dokumentation:

Siehe auch this question, es ist ganz ähnlich wie bei Ihnen.

+1

Dies ist auch sehr nützlich, da ich diese Anwendung in vielen Sprachen machen werde, danke! – vrt1515

Verwandte Themen