En utilisant le cadre Yû, ce serait une bonne façon de traiter un attribut avant de l'afficher à l'aide CHtml :: activeTextField ()
Question
Dire que j'ai cette ligne de code dans la vue.
<?php echo CHtml::activeTextField($model,'start_time'); ?>
start_time est un horodatage UNIX. Lorsque vient l'afficher dans une vue que je peux appliquer des fonctions comme la date () sur elle. Où dois-je appliquer la mise en forme quand je l'afficher sous une forme, en utilisant la ligne ci-dessus code? (Ce cas de dates / heures des pourrait être spécial, mais je suis aussi intéressé à comment peut-on s'y prendre si ce n'était pas une date et je veux juste travailler avec
« valeur dans la base de données » <> « différentes représentations de la valeur dans des vues différentes.
Merci =)
La solution
Nous étendons généralement CActiveRecord::afterFind()
pour convertir les données en un format lisible par l'homme et CActiveRecord::beforeValidate()
pour le transformer en arrière.
Si vous avez besoin de plus d'un format disponible à tout moment, vous pouvez donner aux apporteurs de Yii et setters essayer.
Ayant à la fois
-
CActiveRecord::getFieldName()
et -
CActiveRecord::setFieldName($value)
vous permet de mettre CHtml::activeTextField($model, 'fieldName')
votre point de vue. De toute évidence, vous manipuler la colonne de base de données sous-jacente dans ces méthodes (apparemment, il est appelé start_time dans votre cas). Espérons que cela aide.
Autres conseils
Je l'ai utilisé le CHtml :: textField au lieu de CHtml :: activeTextField comme ceci:
<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?>
Je vais voir si cela fonctionne dans le long terme.
De même au lieu d'appliquer la méthode de la date là, je pourrais avoir smth comme $ modèle-> getSomeProcessedData (); Cool ..:]
OMI, afterFind () vous faire ralentir votre recherche et je ne pense pas beforeValidate () jouent un rôle dans les données d'affichage. Je préfère l'ajout d'getttart_time () dans la classe du modèle pour remplacer le getter de la valeur start_time. Il code de mise en page seulement exécuter lorsque vous devez afficher les données.