【问题标题】:How to apply rules on update in yii2如何在 yii2 中应用更新规则
【发布时间】:2018-09-10 16:29:55
【问题描述】:

我是 yii2 的新手,我不知道如何将相同的插入规则应用到更新中。这是我的插入规则,我希望所有规则也能影响更新。

    public $tag;
    public function rules()
{
    return [
        [['user_id', 'name', 'address', 'state'], 'required'],
        [['user_id'], 'integer'],
        [['tag'], 'safe'],
        [['name'], 'string', 'max' => 30],
        [['address'], 'string', 'max' => 250],
        [['state'], 'string', 'max' => 255],
    ];
}

添加 'on' => 'update' 在我的代码中不起作用。对不起我的英语不好。谢谢。

【问题讨论】:

  • 如果您的规则对所有操作都相同.. 更新不需要特定声明.. 仅当插入和更新之间的规则不同时才必须配置
  • 你说的是哪条规则,比如要求的?
  • 这些规则将应用于更新并插入两者,直到您指定一些仅用于更新的规则,也许您正在询问其他内容
  • 我是 yii2 的新手,我已经阅读了文档。但我的规则默认不更新。

标签: yii yii2 updates rules


【解决方案1】:

您可以像这样向 yii 模型添加验证规则

public function rules(){
        return [
        [['boolean_var'],'boolean'],
            [[ 'range_in_string'],'required'],
            [['default_value'],'default','value'=>'DEFAULT VALUE'],
            [['integer_var'],'integer'],
            [['double_var'],'double'],
            [['number_min'],'number','min'=>10],
            [['number_max'],'number','max'=>100],
            [['number_min_max'],'number','min'=>10,'max'=>100],
            [['file_image'],'image'],
            [['file_var'],'file','types'=>['gif','jpg']],
            [['date_var'],'date', 'format'=>'d-m-yy'],

            [['min_string'],'string','min'=>10],
            [['max_string'],'string','max'=>10],
            [['min_max_string'],'string','min'=>5,'max'=>10],
            ['min_max_string2', 'string', 'length' => [4, 10]],

            ['email_var','email'],
            ['url_var','url'],

            [['unique_var'],'unique'],

            [['filter_trim'],'filter','filter'=>'trim'],
            [['filter_trim'],'filter','filter'=>'strtolower'],
            ['filter_custom_function', 'filter', 'filter' => function ($value) {
            // your concept
            if($value=='')
            return '';
            return 'Value Changed';}],

            ['range_in_min_max', 'in','range'=>range(5,20)],

            ['range_in','in','range'=>['en','fr','zn'],'strict'=>false], //strict false
            ['range_in_string','in','range'=>['EN','FR','ZN'],'strict'=>true],

            ['custom_validation','custom_function_validation'],

            [['passwordConfirm'], 'compare', 'compareAttribute' => 'password'],     
            [['password','date_var'],'safe'],
        ];
}

如果只需要更新而不创建时触发,可以添加这样的场景

public function rules()
{
    return [
        // username, email and password are all required in "update" scenario
        [['username', 'email', 'password'], 'required', 'on' => 'update'],

        // username and password are required in "login" scenario
        [['username', 'password'], 'required', 'on' => 'login'],
    ];
}

并在调用 validate 之前的操作中添加场景

// 场景设置为属性

$model = new User;
$model->scenario = 'update';

【讨论】:

    【解决方案2】:

    在创建和更新中应用默认规则,如果您希望在更新和创建之间有不同的行为,您只需创建新规则。

    要应用规则,只需创建$model->validate() 以检查规则,请参阅 yii2 文档的此示例

    $model->load(\Yii::$app->request->post());
    
    if ($model->validate()) {
        // all inputs are valid
    } else {
        // validation failed: $errors is an array containing error messages
        $errors = $model->errors;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多