我正在使用Yii2,但是我有一个模型这个模型有一些属性,有些在插入/创建模式下是必需的,有些在更新模式下是必需的,比如mode = scenario,所以我用2创建了一个Form模型方案插入和更新,然后我将属性的验证规则设置为方案,问题是:我应该在两个模型中定义方案(活动记录和表单模型)?
提前谢谢你。
答案 0 :(得分:0)
应在您的模型中定义方案..
您应该在相关操作中设置您想要使用的方案
public function actionUpdate(){
....
$model->scenario = 'update';
...
答案 1 :(得分:0)
ActiveRecord read from the database has the "update" scenario, while a new record has the "insert" scenario.
$modelA = User::model()->findByPk(1); // $model->scenario = 'update'
$modelB = new User(); // $model->scenario = 'insert'
$modelB->scenario = 'light'; // custom scenario
if ($modelB->validate()) { // will only apply rules of the "light" scenario
...............
..............
}
答案 2 :(得分:0)
您可以在模型中执行此操作:
class YourModel extends \yii\db\ActiveRecord
{
const SCENARIO_CREATE = 'create';
const SCENARIO_UPDATE = 'update';
...
public function scenarios(){
$scenarios = parent::scenarios();
$scenarios[static::SCENARIO_CREATE] = ['field_1', 'field_2'];
$scenarios[static::SCENARIO_UPDATE] = ['field_1', 'field_3'];
return $scenarios;
}
...
}
在你的控制器中:
class YourController extends Controller {
...
public function actionCreate(){
$model = new YourModel()
$model->scenario = YourModel::SCENARIO_CREATE;
if($model->validate()){ // validate fields specifed in YourModel SCENARIO_CREATE
...
}
...
}
...
public function actionUpdate(){
$model = new YourModel()
$model->scenario = YourModel::SCENARIO_UPDATE;
if($model->validate()){ // validate fields specifed in YourModel SCENARIO_UPDATE
...
}
...
}
}
如果我的回答有帮助,请勾选))