2014-12-24 84 views
2

我想在我創建Yii2的Restful API中使用TimestampBehavior,但是當我使用POST端點創建一個新實體時,返回數據很奇怪。YII2 Restful post和TimestampBehavior

{ 
    "i18_id": 3, 
    "language": "es", 
    "text": "un test de traducción", 
    "created_at": { 
    "expression": "NOW()", 
    "params": [ ] 
    }, 
    "updated_at": { 
    "expression": "NOW()", 
    "params": [ ] 
    }, 
    "id": 2 
} 

當我以後得到實體時,一切看起來都很好。

這裏是如何,我宣佈的行爲在我的模型:

public function behaviors() 
{ 
    return [ 
     'timestamp' => [ 
      'class' => 'yii\behaviors\TimestampBehavior', 
      'attributes' => [ 
       ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], 
       ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'], 
      ], 
      'value' => new Expression('NOW()'), 
     ], 
    ]; 
} 
+0

一個簡單的解決方法是用'time()'替換'new Expression('NOW()')'。 – Cthulhu

+0

它可能在Expression命名空間中輸入錯誤嗎?它應該是yii \ db \ Expression。 –

回答

0

我猜你已經添加在測試中的進入和返回剛添加的模型。

我想一個簡單的$model->refresh();將填寫值。

查看官方文檔here

0

我使用這個值:

'value' => function() { return date('U'); }, 
+0

你能詳細解釋爲什麼你的答案有效嗎?這將有助於更多的讀者找到答案。 – Cristik

+0

@Cristik我很容易。 $ value是將生成時間戳的表達式。我沒有得到NOW表達式,但是通過在Linux控制檯中返回當前時間的函數來解決這個問題。來源:http://www.yiiframework.com/wiki/684/save-and-display-date-time-fields-in-different-formats-in-yii2/ – JJPunch

+0

謝謝,你可以添加這些細節到你的答案也? – Cristik

0

所以最後我找到了一個很好的解決方案感謝@BHoft建議。

主要是我使用其餘的ActiveController和我的api需要使用日期格式創建後返回日期,所以date('U')不適用於我的情況,因爲它不會返回正確格式的日期。

我所做的是我已將afterSave添加到我的模型中。

public function afterSave ($insert, $changedAttributes) 
{ 
    if ($insert) 
     $this->refresh(); 
}