YII在模型中定义场景后
public function scenarios(){//场景 return [ 'sco1'=>['aid','uphone'], 'sco2'=>['aid','uphone','status'], ]; }
在控制器中调用场景时,场景定义之外的字段会在操作时被过滤掉
public function actionSenorio(){ $test = new Code(); $test->scenario = "sco1"; $testData = [ 'data'=>['aid'=>3,'uphone'=>'015889383625'], ]; $test->load($testData,'data');//在使用load前需要制定场景 echo $test->aid;//3 /** * 博客系统 * 写文章时和修改文章时需要保留不同的字段,其他字段会被忽略 **/ }
scenarios()
方法默认实现会返回所有yii\base\Model::rules()方法申明的验证规则中的场景, 当覆盖scenarios()
时,如果你想在默认场景外使用新场景,可以编写类似如下代码:
namespace app\models; use yii\db\ActiveRecord; class User extends ActiveRecord { public function scenarios() { $scenarios = parent::scenarios(); $scenarios['login'] = ['username', 'password']; $scenarios['register'] = ['username', 'email', 'password']; return $scenarios; } }
上面写的可能不是很清晰,我另找了一个
public function scenarios() { return [ 'create' => ['title', 'image', 'content'], 'update' => ['title', 'content'], ]; }
[['title', 'content'], 'required', 'on' => ['create', 'update']], [['image'], 'required', 'on' => 'create'], [['image'], 'image', 'enableClientValidation' => true, 'maxSize' => 1024, 'message' => '您上传的文件过 大', 'on' => ['create']],
$model = $this->findModel($id); $model->setScenario('update'); or $model->scenario = 'update';