0

使用後$model->save();、既存の動作をキャンセルしますDateTimeI18NBehavior。誰もが解決する方法を知っていますか?

動作DateTimeI18NBehavior:http ://www.yiiframework.com/extension/i18n-datetime-behavior/


Users.php(モデル):

...
public function behaviors()
{
    return array(
        'datetimeI18NBehavior'=>array(
            'class' => 'ext.DateTimeI18NBehavior',
        ),
    );
}
...

コード:

$criteria = new CDbCriteria;
$model = Users::model()->findByPk('1');
echo $model->birthday;
// Response: 15/10/1900 (right)

コード2:

$criteria = new CDbCriteria;
$model = Users::model()->findByPk('1');

$model->ip = Yii::app()->request->userHostAddress;
$model->save();

echo $model->birthday;
// Response: 1990-10-15 (wrong)
4

1 に答える 1

3

のバグですDateTimeI18NBehavior。データを保存する前に日時を Ymd にフォーマットし、そのままにします。簡単な修正はafterSave()、ロジックがafterFind()

public function afterSave($event){

        foreach($event->sender->tableSchema->columns as $columnName => $column){

            if (($column->dbType != 'date') and ($column->dbType != 'datetime')) continue;

            if (!strlen($event->sender->$columnName)){ 
                $event->sender->$columnName = null;
                continue;
            }

            if ($column->dbType == 'date'){             
                $event->sender->$columnName = Yii::app()->dateFormatter->formatDateTime(
                                CDateTimeParser::parse($event->sender->$columnName, $this->dateIncomeFormat),'medium',null);
            }else{              
                $event->sender->$columnName = 
                    Yii::app()->dateFormatter->formatDateTime(
                            CDateTimeParser::parse($event->sender->$columnName, $this->dateTimeIncomeFormat), 
                            'medium', 'medium');
            }
        }
        return true;
    }
于 2013-02-21T10:00:57.963 に答える