根据场景设置默认模型值 [英] Setting default model value depending on a scenario

查看:25
本文介绍了根据场景设置默认模型值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不明白为什么设置默认值对我不起作用.

I can't sort out why setting default value doesn't work for me.

这是我的控制器:

class QueryController extends ActiveController

{
    public $modelClass = 'app\models\Query';
    public $createScenario = 'restCreate';
    public $updateScenario = 'restUpdate';

我不会覆盖默认的 createAction 方法.

I don't override the default createAction method.

型号:

 class Query extends ActiveRecord 
{public function rules()
{
    return [
        [['userId', 'name', 'created', 'isOneTime', 'isArchived', 'settings', 'engine'], 'required'],
        [['userId'], 'integer'],
        [['name', 'settings', 'schedule'], 'string'],
        [['created', 'lastUpdate'], 'safe'],
        [['isOneTime', 'isArchived', 'isApi', 'valid'], 'boolean'],
        [['state', 'engine'], 'string', 'max' => 160],
        [['isApi'], 'default', 'value'=> false],
        [['isApi'], 'default', 'value'=> true, 'on' => 'restCreate']
    ];
} 
public function scenarios()
    {
            $scenarios = parent::scenarios();
            $scenarios['restCreate'] = ['name', 'state', 'isApi', 'isOneTime', 'settings', 'schedule'];
            $scenarios['restUpdate'] = ['name', 'state', 'isOneTime', 'settings', 'schedule' ];
        return $scenarios;
    }

当我通过 Rest 控制器创建一个新条目时,它应该默认设置 isApi = true,但它不会以这种方式工作.如何根据场景分配默认模型值?

When I create a new entry via a Rest controller, it should set isApi = true by default, but it doesn't work in a such way. How can I assign a default model values depending on scenario?

推荐答案

你应该交换这个规则:
[['isApi'], 'default', 'value'=>false]
[['isApi'], 'default', 'value'=>真,开"=>'restCreate']

您必须这样做,因为 DefaultValueValidator 仅对单个字段应用一次.此验证器仅在字段值为空时运行.有这个检查:\yii\validators\DefaultValueValidator::validateAttribute()

You must do this because DefaultValueValidator appling only one time for single field. This validator run only if field's value is empty. There is this check: \yii\validators\DefaultValueValidator::validateAttribute()

模型一一运行验证器.[['isApi'], 'default', 'value'=>false] 将字段的值设置为 false.[['isApi'], 'default', 'value'=>真,开"=>'restCreate'] 看到该值不为空并跳过.

Model runs validators one by one. [['isApi'], 'default', 'value'=> false] sets value for field to false. [['isApi'], 'default', 'value'=> true, 'on' => 'restCreate'] see that value is not empty and skipped.

这篇关于根据场景设置默认模型值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆