Utilizzando framework Yii, quale sarebbe un modo giusto di trattare un attributo prima di visualizzarlo utilizzando cHTML :: activeTextField ()

StackOverflow https://stackoverflow.com/questions/2437045

  •  19-09-2019
  •  | 
  •  

Domanda

Dire che ho questa riga di codice nella vista.

<?php echo CHtml::activeTextField($model,'start_time'); ?>

start_time è un timestamp UNIX. Quando solo la visualizzazione in una vista posso applicare funzioni come la data () su di esso. Dove devo applicare la formattazione quando sono la visualizzazione in una forma, utilizzando la riga di codice precedente? (Questo caso di timestamp / date potrebbe essere speciale, ma sono anche interessato a come si potrebbe fare per se non fosse una data e voglio solo lavorare con

  

"valore nel database" <> "diverse rappresentazioni del valore in diversi punti di vista.

Grazie =)

È stato utile?

Soluzione

In genere estendiamo CActiveRecord::afterFind() per convertire i dati in un formato leggibile e CActiveRecord::beforeValidate() di trasformarla di nuovo.

Se avete bisogno di più di un formato disponibile in ogni momento, si consiglia di dare getter e setter di Yii una prova.

Avendo entrambi

  • CActiveRecord::getFieldName() e
  • CActiveRecord::setFieldName($value)

permette di mettere CHtml::activeTextField($model, 'fieldName') nel vostro punto di vista. Ovviamente, di manipolare la colonna database sottostante a questi metodi (a quanto pare si chiama start_time nel tuo caso). Spero che questo aiuti.

Altri suggerimenti

Ho usato il cHTML :: textField invece di CHTML :: activeTextField in questo modo:

<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?>

Vedrò se funziona nel lungo periodo.

Allo stesso modo, invece di applicare il metodo della data proprio lì, ho potuto avere smth come $ modello-> getSomeProcessedData (); Cool ..:]

IMO, afterFind () ti fanno rallentare la ricerca e non credo che beforeValidate () svolge alcun ruolo nella visualizzazione dei dati. Io preferisco l'aggiunta di getttart_time () nella classe del modello per ignorare il getter del valore di start_time. C'è il tuo codice di formattazione gestita solo quando è necessario per visualizzare i dati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top