環境為YII2正式版
情景再現
使用者表有一個欄位create_time,我在rules裡面設定了如下規則
[['create_time'],'default','value'=>time(),'on'=>['sign']]
然後我添加使用者的時候註冊時間就無法預設了.把情境相關的刪掉就行了,這個怎麼破?
以下是要修改和刪除的代碼
[['create_time'],'default','value'=>time(),'on'=>['sign']]改為[['create_time'],'default','value'=>time()]
User模型的
public function scenarios(){ return [ 'sign'=>['create_time'] ]}
SignFrom模型的
$user = new user();$user->setScenario('sign');//這行刪除
然後就恢複正常了
回複內容:
環境為YII2正式版
情景再現
使用者表有一個欄位create_time,我在rules裡面設定了如下規則
[['create_time'],'default','value'=>time(),'on'=>['sign']]
然後我添加使用者的時候註冊時間就無法預設了.把情境相關的刪掉就行了,這個怎麼破?
以下是要修改和刪除的代碼
[['create_time'],'default','value'=>time(),'on'=>['sign']]改為[['create_time'],'default','value'=>time()]
User模型的
public function scenarios(){ return [ 'sign'=>['create_time'] ]}
SignFrom模型的
$user = new user();$user->setScenario('sign');//這行刪除
然後就恢複正常了
如果僅僅只是為了註冊的時候自動填滿create_time 這個必須推薦使用模型的 behaviors
[ 'class' => TimestampBehavior::className(), 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['create_time'], ], ], ]; } ...}
如果是為瞭解決情境帶來的困擾那麼在不是sign的時候不要 設定情境就好了
科普一下情境 scenario 情境是為了區分模型在不同使用方式下做不同的驗證區分 假設 rules 有指定 on => 'sign' 說明這條驗證規則只在 scenario的情況下 validate生效 所以請不要一執行個體模型就給設定情境
我也遇到了同樣的問題, 目前還沒有深入去看架構的代碼;
暫時用 ActiveRecord.beforeSave 替換了 rules.