Usando framework Yii, o que seria uma maneira certa para processar um atributo antes de exibi-lo usando chtml :: activeTextField ()
Pergunta
Say Eu tenho esta linha de código no modo de exibição.
<?php echo CHtml::activeTextField($model,'start_time'); ?>
start_time é um timestamp UNIX. Quando apenas exibi-lo em uma visão que eu posso aplicar funções como data () sobre ele. Onde devo aplicar a formatação quando estou exibi-lo em um formulário, usando a linha de código acima? (Este caso de marcas de tempo / datas pode ser especial, mas eu também estou interessado em como é que um vá sobre se não fosse uma data e eu só quero trabalhar com
"valor no banco de dados" <> "diferentes representações do valor em diferentes pontos de vista.
Graças =)
Solução
Nós geralmente se estendem CActiveRecord::afterFind()
para converter os dados em um formato e CActiveRecord::beforeValidate()
legível para transformá-lo de volta.
Se precisar de mais do que um formato disponível em todos os momentos, você pode querer dar getters e setters do Yii uma tentativa.
Tendo ambos
-
CActiveRecord::getFieldName()
e -
CActiveRecord::setFieldName($value)
permite que você coloque CHtml::activeTextField($model, 'fieldName')
em seus pontos de vista. Obviamente, você manipular a coluna de banco de dados subjacente nesses métodos (aparentemente ele é chamado start_time no seu caso). Espero que isso ajude.
Outras dicas
Eu usei o chtml :: textField vez de chtml :: activeTextField assim:
<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?>
Vou ver se isso funciona no longo prazo.
Da mesma forma, em vez de aplicar método data ali mesmo, eu poderia ter smth como $ model-> getSomeProcessedData (); Legal ..:]
IMO, afterFind () fazer você abrandar a sua pesquisa e eu não acho que beforeValidate () desempenhar qualquer papel em dados de exibição. Eu prefiro adicionando getttart_time () para a classe modelo para substituir o getter de valor start_time. Há o código de formatação executar somente quando você precisa exibir dados.