YII2 啟用情境之後,影響了某些驗證規則怎麼辦?

來源:互聯網
上載者:User
環境為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.

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.