【问题标题】:Yii2 Controller post request is NULLYii2 控制器发布请求为 NULL
【发布时间】:2020-03-16 16:25:37
【问题描述】:

谁能说出为什么数据库中的控制器帖子为 NULL ? 但在 vardump 中有数据

控制器

 $model = new Reg();

 $model->load(\Yii::$app->request->post());
 $model->save();   

型号

public function rules()
{
    return [
        [['title', 'article', 'fio','country', 'position','tel', 'email','cert'], 'required',  'message'=>'required'],
        [['title', 'article', 'fio','country', 'position','tel', 'email','cert'], 'string'],
        [['title', 'article'], 'safe'],
    ];
}

查看

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?php echo $form->field($model,'title')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php echo $form->field($model,'article')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php echo $form->field($model,'fio')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php echo $form->field($model,'country')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php echo $form->field($model,'position')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php echo $form->field($model,'tel')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php echo $form->field($model,'email')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php echo $form->field($model,'cert')->textInput(['class'=>'header__enter__input','placeholder'=>''])->label(false) ?>
<?php ActiveForm::end() ?>

【问题讨论】:

  • 显示你的整个model
  • 显示Yii::$app-&gt;request-&gt;post()的输出

标签: php yii2


【解决方案1】:

当模型 validate() 返回 true 时,ActiveRecord 将数据插入数据库。如果模型属性验证发生此错误并且 validate() 方法返回错误的发布数据将不会插入到 db 以查看错误,您可以使用将控制器更改为此

 $model = new Reg();   

    if($model->load(Yii::$app->request->post()) && $model->validate() && $model->save()){   
        return $this->redirect(['index']);   
    }   

    return $this->render('create', ['model' => $model]);   
}  

您可以查看是否验证错误并修复此问题

【讨论】:

  • 不知道谁在使用 ActiveRecord 模型时对这个答案投票赞成 $model-&gt;validate() 在保存数据时总是被调用,除非你调用 $model-&gt;save(false),所以你在技术上调用了两次 validate(),你只如果您正在使用表单模型或使用 yii\base\Model 扩展您的模型,请致电 $model-&gt;validate()
【解决方案2】:

$model-&gt;save(false);

将通过跳过验证来强制保存您的数据,但这是不好的做法,

保存后使用$model-&gt;getErrors(),它将返回阻止数据从数据库存储的验证错误列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多