2016-09-18 16:49:21 3907次浏览 5条回答 0 悬赏 20 金钱

public function rules()

{
    return [
        [['name', 'age', 'brithday'], 'required', 'message' => '{attribute}不能为空', 'on' => 'create'],
        [['name'], 'unique', 'on' => 'create'],
        [['name'], 'check_name'],
        [['age'], 'required', 'message' => '不能为空', 'on' => 'update'],
        [['age', 'sex'], 'integer', 'on' => 'create'],
        [['brithday'], 'safe'],
        [['name'], 'string', 'max' => 128],
        [['img'], 'string', 'max' => 255],
        [['img'], 'file'],
    ];
}

public function scenarios()

{
    $scenarios = parent::scenarios();//本行必填,不写的话就会报如上错误
    $scenarios['create'] = ['name', 'age', 'sex', 'brithday'];
    $scenarios['update'] = ['name', 'age'];
    return $scenarios;
}

这样在验证的时候根本不管用,求解

补充于 2016-09-18 16:50

public function actionValidate()

{
    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    $model = new Student();   //这里要替换成自己的模型类
    $model->load(Yii::$app->request->post());
    $error_model = \yii\widgets\ActiveForm::validate($model);
    return $error_model;
}
  • 回答于 2016-09-18 16:59 举报

    编辑页面可有设置场景?

    1 条回复
    回复于 2016-09-18 18:49 回复

    设置了
    $model = new Student();

        $model->setScenario('create');
    
  • 回答于 2016-09-18 18:08 举报

    rules() 和 scenarios()只要有设置一个就够了。
    在实例化的时候,例如 $model = new Student();
    要传入场景值,有2种方法
    1:new Student('update'),
    2:$model->scenario = 'update';

    1 条回复
    回复于 2016-09-18 18:48 回复

    我设置场景了
    $model = new Student();
    $model->setScenario('create');

  • 回答于 2016-09-18 18:34 举报

    楼上正解.你编辑页面的时候没设置场景

  • 回答于 2016-09-19 10:39 举报

    雖然跟您問的問題無關~ 但您的問題已有人解答

    但看到您註解這句 $scenarios = parent::scenarios();//本行必填,不写的话就会报如上错误

    你可以看看 Scenario 有兩種寫法 網址如下

    http://www.yiiframework.com/doc-2.0/guide-structure-models.html#scenarios

    一種是有 Default, 另外一種只限有 Scenario 驗證

    Default : 當沒有設定 Scenario 會自行驗證 rules

    public function scenarios()
    {
        $scenarios = parent::scenarios();//本行必填,不写的话就会报如上错误
        //$scenarios['create'] = ['name', 'age', 'sex', 'brithday'];
        //$scenarios['update'] = ['name', 'age'];
        return $scenarios;
    }
    
    

    customize behavior : 自訂 Scenario 行為

    const SCENARIO_CREATE = 'create';
    const SCENARIO_UPDATE = 'update';
    
    public function scenarios()
    {
        return [
    	self::SCENARIO_CREATE => ['name', 'age', 'sex', 'brithday'],
    	self::SCENARIO_UPDATE => ['name', 'age']
        ];
    }
    
  • 回答于 2017-07-04 14:47 举报

    问下 重写function scenarios()这个 是不是每个模型必须写,我试过不写也能正常使用
    还有就是我现在模型有个自定义验证,而且这个验证要在某个场景下才能使用,这个时候是不是要重写scenarios()???

您需要登录后才可以回答。登录 | 立即注册
38295
等待激活

38295

注册时间:2016-10-31
最后登录:1970-01-01
在线时长:0小时0分
  • 粉丝0
  • 金钱35
  • 威望0
  • 积分35

热门问题