Yii2 Gii生成的创建视图不工作/保存,但更新不工作/保存

Yii2 Gii生成的创建视图不工作/保存,但更新不工作/保存,yii2,sql-insert,yii2-advanced-app,gii,Yii2,Sql Insert,Yii2 Advanced App,Gii,刚从Yii开始(两周前) TL;DR 通过Gii创建生成的视图不起作用,但更新起作用,即使它们共享未编辑的表单和控制器 问题: 我用这个 然后,我通过模型生成器生成了一个模型,并通过CRUD生成器生成了控制器/视图 我唯一更改的是从表单中删除了两个datetime字段“created_at”和“created_by”,并添加了一个TimestampBehavior: public function behaviors() { return [ [

刚从Yii开始(两周前)

TL;DR

通过Gii创建生成的视图不起作用,但更新起作用,即使它们共享未编辑的表单和控制器

问题:

我用这个

然后,我通过模型生成器生成了一个模型,并通过CRUD生成器生成了控制器/视图

我唯一更改的是从表单中删除了两个datetime字段“created_at”和“created_by”,并添加了一个TimestampBehavior:

public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'attributes' => [
                ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
                ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
              ],
              // if you're using datetime instead of UNIX timestamp:
              'value' => new Expression('NOW()'),
        ],
    ];
}
我遇到的奇怪情况是,更新工作正常,但创建失败。它没有显示错误,只是停留在页面上还是新呈现

这是来自控制器的未触及代码:

(if中的“$model->save”应该将其保存到数据库中,这是否正确?

创建:

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

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}
更新:

public function actionUpdate($id)
{
    $model = $this->findModel($id);

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}
如果需要更多信息,请评论。 谢谢


更新-解决方案

在两个有用的答案之后,我尝试转储错误,结果显示

array(1) { ["created_at"]=> array(1) { [0]=> string(32) "Created At darf nicht leer sein." } }
正如我所建议的,我在规则的“必需”部分留下了“created_at”。清理后,创建工作。
我想它没有显示错误,因为我删除了表单中的字段,因为用户不应该直接输入数据。

您显示的控制器正常

这个模型一定有问题。您可以通过编辑actionCreate来检查问题所在:

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

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        var_dump($model->getErrors());
        /*return $this->render('create', [
            'model' => $model,
        ]);*/
    }
}
现在,关于您的更改:由于您正在使用列名称
created\u at
updated\u at
,您可以通过以下设置简化行为:

public function behaviors()
{
    return [
        TimestampBehavior::className()
    ];
};

此外,如果在处创建的字段
或在
处更新的字段存在,请检查模型规则(),并将其删除。不再需要它们。

检查模型中的规则,然后重试。另外,请尝试使用
$model->save(false)
。它将保存表单而不进行检查验证,因此问题是数据无法验证。

我不太理解您所说的“它没有显示错误,只是停留在页面上或新呈现”。。。你的意思是url更改为action create,页面再次加载,但内容与action update相同?或者页面根本没有加载?是否可以向我们显示视图?这些视图是gii生成的标准视图。是的,对我来说,似乎页面再次加载,表单的内容被我输入的数据、无误位或类似的东西预先填充。要清楚,我正在执行/create操作,希望通过单击“create”(创建)按钮保存表单数据,页面重新加载(url中的相同操作-create)只是用我的数据再次显示表单,而不是用新创建的id显示视图操作。谢谢,这为我指明了正确的方向。我在问题中将解决方案发布为更新我在行为中使用了完整的代码,因为我使用了datetime字段而不是标准整数。