gpt4 book ai didi

php - Yii2 ActiveRecord 模型最佳实践

转载 作者:行者123 更新时间:2023-12-03 21:00:27 28 4
gpt4 key购买 nike

我有这些类(class):

型号:

namespace app\models;

use \yii\db\ActiveRecord;

class MyModel extends ActiveRecord {

public function rules() {
return [
[['name'], 'required'],
[['id'], 'default', 'value' => null]
];
}

}

Controller :

<?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(); ?>

我想使用此 View 进行编辑和插入。编辑不能按原样进行,因为我正在创建一个新对象,而不是更改 Controller 中的现有对象。我不确定这里的最佳实践是什么,或者我是否缺少一些已经存在的内置函数?

  • 我应该创建自己的模型类并在 Controller 中实现逻辑模型<->事件记录

  • 我是否应该使用 Controller 中的 $model->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('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 来生成 Controller ,则无需编写这些操作。

关于php - Yii2 ActiveRecord 模型最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33729540/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com