2015-12-02 95 views
0

刚开始与Yii(两周前)。Yii2 Gii生成创建视图不工作/保存,但更新确实

TL; DR

通过GII创建生成的视图不工作,但不更新,即使它们共享形式和控制器不能进行编辑。

问题:

我用的是Yii2 advanced app template

然后我通过CRUD生成器通过模型生成器和控制器/视图生成模型。

我改变是消除从形成两个日期时间字段“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()'), 
     ], 
    ]; 
} 

奇怪的情况下,我有是,更新工作,但创造不了。它显示没有错误,它只是留在页面上或重新渲染它?

这是从控制器触及代码:

(我是不是得到正确的“$模型 - >保存”,在是否应该将其保存到DATABSE?)

CREATE :

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, 
     ]); 
    } 
} 

UPDATE:

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”中的“必需的”一节中的规则。清理完成后,创建作品。 我认为它没有向我显示错误,因为我删除了表单中的字段,因为用户不应该直接输入数据。

+0

我没有完全理解你说的**“它没有显示错误,它只是留在页面上或者重新渲染它”** ......你的意思是URL更改为动作创建,页面再次加载,但是内容与动作更新相同吗?或者页面甚至没有加载? – Clyff

+0

是否可以向我们展示意见? – Clyff

+0

这些视图是由gii生成的标准视图。是的,对我来说,似乎再次加载页面,表单的内容预填了我输入的数据,有点没有错误或类似的东西。 – michaK

回答

1

你显示的控制器没问题。

该模型肯定有问题。您可以检查出了什么问题通过编辑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_atupdated_at,你可以通过设置简化行为:

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

另外,如果字段created_atupdated_at在那里,请检查您的模型规则()并将其删除。他们不再需要了。

+0

谢谢,这指出我正确的方向。我在我的问题中发布解决方案作为更新 – michaK

+0

我在行为中使用了完整的代码,因为我使用了日期时间字段而不是标准整数。 – michaK

1

检查模型中的规则并重试。另外,请尝试$model->save(false)。它会保存没有检查验证的表单,所以问题是数据不能验证。

+0

感谢您的回答,这也是对的。 – michaK