yii 프레임 워크를 사용하면 chtml :: activeetxtfield ()를 사용하여 표시하기 전에 속성을 처리하는 올바른 방법은 무엇입니까?
문제
보기 에이 코드 라인이 있다고 가정 해 봅시다.
<?php echo CHtml::activeTextField($model,'start_time'); ?>
start_time은 Unix 타임 스탬프입니다. 보기로 표시하면 날짜 ()와 같은 함수를 적용 할 수 있습니다. 위의 코드 줄을 사용하여 양식으로 표시 할 때 포맷을 어디에 적용해야합니까? (이 타임 스탬프/날짜 사례는 특별 할 수도 있지만 데이트가 아니었다면 어떻게 진행할 것인지에 관심이 있고 함께 일하고 싶습니다.
"데이터베이스의 값"<> "다른보기에서 값의 다른 표현.
감사합니다 =)
해결책
우리는 일반적으로 확장됩니다 CActiveRecord::afterFind()
데이터를 사람이 읽을 수있는 형식으로 변환합니다 CActiveRecord::beforeValidate()
다시 변환합니다.
항상 두 개 이상의 형식을 사용할 수있는 경우 YII의 getters and setters에게 시도해 볼 수 있습니다.
둘 다
CActiveRecord::getFieldName()
그리고CActiveRecord::setFieldName($value)
당신이 넣을 수 있습니다 CHtml::activeTextField($model, 'fieldName')
당신의 견해에서. 분명히, 당신은 해당 방법에서 기본 데이터베이스 열을 조작합니다 (분명히 당신의 경우 start_time이라고 함). 도움이 되었기를 바랍니다.
다른 팁
chtml :: activeTextfield 대신 chtml :: textfield를 사용했습니다.
<?php echo CHtml::textField(get_class($model).'[start_time]', date('Y-m-d H:i', $model->start_time)); ?>
그것이 장기적으로 작동하는지 볼 것입니다.
날짜 방법을 바로 적용하는 대신 $ model-> getSomeProcessedData ()와 같은 SMTH를 가질 수 있습니다. 시원한.. :
imo, afterfind ()는 검색 속도를 늦추게하며 Validate ()가 디스플레이 데이터에서 어떤 역할을 수행한다고 생각하지 않습니다. start_time 값의 getter를 무시하기 위해 모델 클래스에 getttart_time ()을 추가하는 것이 좋습니다. 서식 코드는 데이터를 표시해야 할 때만 실행됩니다.