Yii2模型验证

时间:2016-05-23 08:00:22

标签: php yii2

我正在使用Yii2,但是我有一个模型这个模型有一些属性,有些在插入/创建模式下是必需的,有些在更新模式下是必需的,比如mode = scenario,所以我用2创建了一个Form模型方案插入和更新,然后我将属性的验证规则设置为方案,问题是:我应该在两个模型中定义方案(活动记录和表单模型)?

提前谢谢你。

3 个答案:

答案 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 
            ...
        }

        ...
    }

}

如果我的回答有帮助,请勾选))