我有这些课程:
型号:
namespace app\models;
use \yii\db\ActiveRecord;
class MyModel extends ActiveRecord {
public function rules() {
return [
[['name'], 'required'],
[['id'], 'default', 'value' => null]
];
}
}
控制器:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\MyModel;
class MymodelController extends Controller{
public function actionEdit($id = null){
$model = new MyModel();
if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->save()) {
Yii::$app->session->setFlash('msg', 'Model has been saved with ID ' . $model->id);
}
return $this->render('edit', [
'model' => $model
]);
}
}
查看:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php if(Yii::$app->session->hasFlash('msg')): ?>
<div class="alert alert-success"><?= Yii::$app->session->getFlash('msg'); ?></div>
<?php endif; ?>
<?php $form = ActiveForm::begin(); ?>
<?= Html::activeHiddenInput($model, 'id'); ?>
<?= $form->field($model, 'name') ?>
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
我想使用此视图进行编辑和插入。编辑不能正常工作,因为我正在创建一个新对象,而不是在Controller中更改现有对象。我不确定这里的最佳做法是什么,或者我是否遗漏了一些现有的内置功能?
或
$model->id
查询数据库,并在需要时复制所有属性吗?答案 0 :(得分:3)
你应该使用两个动作进行编辑和插入
编辑首先找到模型
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('edit', [
'model' => $model,
]);
}
protected function findModel($id)
{
if (($model = MyModel::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
如果您使用CRUD生成控制器,则不必编写这些操作。
答案 1 :(得分:2)
对于CRUD(创建,读取/查看,更新和删除),您可以使用gii。此电动工具自动生成ActiveRecord,Controller所需的所有操作,包括基本操作(索引,视图,创建,更新,删除,查找)和相关视图。
在gii中,您首先生成模型类,然后为此类生成CRUD。
但是最有线的事情所有这些信息都是相互关联的
看到这个文档是非常有用的,Yii2的最佳实践是在该工具中实现的 http://www.yiiframework.com/doc-2.0/guide-start-gii.html
答案 2 :(得分:0)
在您的“创建”操作中:
public function actionCreate()
{
$model = new Yourmodel();
if ($model->load(Yii::$app->request->post())) {
if($model->save()){
return $this->redirect(['view']);
}
}
return $this->render('create', [
'model' => $model,
]);
}
在您的更新操作中:
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post())) {
if($model->save()){
return $this->redirect(['view', 'id' => $model->id]);
}
}
return $this->render('update', [
'model' => $model,
]);
}