错误请求 (#400) - 缺少必需的参数:YII2 中的 id

Bad Request (#400) - Missing required parameters: id in YII2

我想使用 GII 工具进行 CRUD 操作,但是当我尝试保存 post.

时收到错误消息 Missing required parameters: id

Post 控制器:

public function actionCreate()
{
    $model = new Post();

    if ($model->load(Yii::$app->request->post())) {
        $model->post_create_time=date('Y-m-d h:m:s');
        $model->save();
        return $this->redirect(['view', 'id' => $model->id_post]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

为什么我总是收到这个错误?

您可以在此处尝试一些操作:

  • 使用前检查$model->post_id是否为空

参见下面的示例

$success=$model->save();
// if it's false, it means there was an error
var_dump($success);
exit;
  • 使用前检查save()是否成功:

见下方代码

if($model->save()){
    return $this->redirect(['view', 'id' => $model->id_post]);
}else{
    // show errors
    var_dump($model->getErrors();
    exit;
}

除此之外,我建议您 post actionView 和 class Post 的代码

尝试

public function actionCreate()
{
    $model = new Post();

    if ($model->load(Yii::$app->request->post())) {
        $model->post_create_time=date('Y-m-d h:m:s');
        $model->save(false);

        return $this->redirect(['view', 'id' => $model->id_post]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

确保你这样做 $model->save(false) 看看它是否有效。

试试这个

public function actionCreate()
{
    $model = new Post();

    if ($model->load(Yii::$app->request->post())) {
        $model->post_create_time=date('Y-m-d h:m:s');
        if($model->save())
            return $this->redirect(['view', 'id' => $model->id_post]);
        else
            {
            return $this->render('create', [
            'model' => $mod`enter code here`el,
            ]);
        }
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}

显然发生在 $this->redirect 上。检查 main.php 文件中的 url 规则。 它应该位于 main.php

中的某处
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => false,
    'rules' => [
      ...
   ]
],

有些字段太短,因此无法存储,但现在会显示准确的错误消息。 我增加字段大小,没关系。