2015-06-29 74 views
3

我的模型規則是這樣的如何在Yii2中定義場景?

public function rules() 
     { 
      return [ 
       [['email','password'], 'required'], 
       [['email'],'unique'], 
       [['status','role_id','created_by', 'updated_by', 'is_deleted'], 'integer'], 
       [['created_at', 'updated_at'], 'safe'], 
       [['first_name', 'last_name', 'email', 'username','location','address','about_me'], 'string', 'max' => 200], 
       [['phone'], 'string', 'max' => 100] 
      ]; 
     } 

,同時創建一個新用戶,我需要需要電子郵件地址和密碼,但更新過程中,我需要只需要用戶名。我怎樣才能做到這一點?

回答

9

首先,最好是添加場景爲常數的模型,而不是硬編碼字符串,例如:

const SCENARIO_CREATE = 'create'; 

然後你可以使用它像這樣:

[['email','password'], 'required', 'on' => self::SCENARIO_CREATE], 

另一種方式是在scenarios()中描述方法:

public function scenarios() 
{ 
    $scenarios = parent::scenarios(); 
    $scenarios[self::SCENARIO_CREATE] = ['email', 'password']; 

    return $scenarios; 
} 

這樣你需要指定爲每個場景提供所有安全屬性。

最後,不要忘記在創建新模型實例後設置所需的場景。

$model = new User; 
$model->scenario = User::SCENARIO_CREATE; 
... 

官方文檔: