2015-02-03 5 views
8

Ho una tabella denominata Riproduci e sto visualizzando i dettagli di ciascun record nel widget Vista dettagli Yii2. Ho un attributo in quella tabella recurring che è di tipo tinyint, può essere 0 o 1. Ma io non voglio vederlo come un numero, invece voglio mostrare yes o no in base al valore (0 o 1).Modifica del valore di un attributo nel widget DetailView

sto cercando di cambiare la situazione con una funzione in widget di detailview ma sto ottenendo un errore: Object of class Closure could not be converted to string

mio particolare codice della vista:

<?= 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', 
     ... 

Qualsiasi aiuto sarebbe apprezzato!

+0

Tratto da una domanda simile: [Closures in DetailView] (http://stackoverflow.com/questions/39266846/assegnazione-di-valutazione-di-valore-attributo-in-details-view-yii2/39299638#39299638) – MacGyer

risposta

13

Prova

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

Questo ha fatto il trucco, grazie mille! – vrt1515

14

differenza GridView che elabora un insieme di modelli, processi DetailView uno solo. Quindi non è necessario utilizzare la chiusura poiché $model è l'unico modello per la visualizzazione e disponibile in visualizzazione come variabile.

Si può sicuramente usare solution suggerito da rkm, ma c'è l'opzione più semplice.

Tra l'altro è possibile semplificare condizione un po 'dal momento che i valori consentiti sono solo 0 e 1:

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

Se si desidera visualizzare solo valore come booleano, è possibile aggiungere il suffisso di formattazione con i due punti:

'recurring:boolean', 

'format' => 'raw' è ridondante qui perché è solo testo senza html.

Se si desidera aggiungere ulteriori opzioni, è possibile utilizzare questo:

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

Utilizzando formattatore è l'approccio più flessibile perché queste etichette saranno generate a seconda della lingua set di applicazioni in config.

documentazione ufficiale:

Vedi anche this question, è abbastanza simile al tuo.

+1

Questo è anche molto utile poiché creerò questa applicazione in molte lingue, grazie! – vrt1515