当前位置:  首页>> 技术小册>> Yii2框架从入门到精通(上)

5.4 项目实现迭代六:在“文章添加”页面实现数据插入

在Yii2框架的项目开发过程中,实现数据的增删改查(CRUD)是构建动态网站或应用程序的基础。本章节将聚焦于“文章添加”功能的实现,即如何在Yii2项目中创建一个表单页面,允许用户输入文章信息,并将这些数据保存到数据库中。我们将通过详细步骤讲解如何配置控制器、模型、视图以及数据库迁移,来完成这一功能的开发。

5.4.1 准备工作

在开始编码之前,请确保你的Yii2项目已经正确设置,并且已经创建了用于存储文章数据的数据库表。假设我们已经有一个名为article的表,包含字段如id(主键,自增)、title(标题)、content(内容)、status(状态,例如发布或草稿)和created_at(创建时间)等。

5.4.2 创建模型

首先,我们需要一个与article表对应的模型类。在models目录下创建一个名为Article.php的PHP文件,并编写如下代码:

  1. <?php
  2. namespace app\models;
  3. use Yii\Db\ActiveRecord;
  4. class Article extends ActiveRecord
  5. {
  6. // 关联数据库表
  7. public static function tableName()
  8. {
  9. return '{{%article}}';
  10. }
  11. // 验证规则
  12. public function rules()
  13. {
  14. return [
  15. [['title', 'content'], 'required'],
  16. ['title', 'string', 'max' => 255],
  17. ['content', 'string'],
  18. ['status', 'integer'],
  19. ];
  20. }
  21. // 场景定义
  22. public function scenarios()
  23. {
  24. $scenarios = parent::scenarios();
  25. $scenarios['create'] = ['title', 'content', 'status'];
  26. return $scenarios;
  27. }
  28. }

在这个模型中,我们定义了与article表的关联、数据验证规则以及特定的使用场景(在本例中为create)。

5.4.3 创建控制器

接下来,在controllers目录下创建一个用于处理文章相关操作的控制器ArticleController.php,并添加actionCreate方法来处理文章添加的逻辑:

  1. <?php
  2. namespace app\controllers;
  3. use Yii;
  4. use yii\web\Controller;
  5. use app\models\Article;
  6. class ArticleController extends Controller
  7. {
  8. public function actionCreate()
  9. {
  10. $model = new Article();
  11. if ($model->load(Yii::$app->request->post()) && $model->save()) {
  12. Yii::$app->session->setFlash('success', '文章添加成功!');
  13. return $this->redirect(['index']); // 假设有一个index动作显示文章列表
  14. }
  15. return $this->render('create', [
  16. 'model' => $model,
  17. ]);
  18. }
  19. }

在这个控制器中,我们首先实例化了一个Article模型对象。然后,使用load()方法从POST请求中加载数据到模型中,并尝试使用save()方法保存这些数据到数据库。如果保存成功,则设置会话消息并重定向到文章列表页面;如果失败,则渲染create视图,并将模型对象传递给视图以便显示表单和错误信息。

5.4.4 创建视图

现在,在views/article目录下创建一个名为create.php的视图文件,用于展示文章添加表单:

  1. <?php
  2. use yii\helpers\Html;
  3. use yii\widgets\ActiveForm;
  4. /* @var $this yii\web\View */
  5. /* @var $model app\models\Article */
  6. /* @var $form yii\widgets\ActiveForm */
  7. ?>
  8. <div class="article-create">
  9. <h1>添加文章</h1>
  10. <?php $form = ActiveForm::begin(); ?>
  11. <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
  12. <?= $form->field($model, 'content')->textarea(['rows' => 6]) ?>
  13. <?= $form->field($model, 'status')->dropDownList([
  14. 0 => '草稿',
  15. 1 => '发布',
  16. ], ['prompt' => '请选择状态']) ?>
  17. <div class="form-group">
  18. <?= Html::submitButton('提交', ['class' => 'btn btn-primary']) ?>
  19. </div>
  20. <?php ActiveForm::end(); ?>
  21. </div>

在这个视图中,我们使用了Yii2的ActiveFormHtml助手类来创建表单元素。$form->field()方法用于生成带有标签、输入字段和验证错误的表单项。$model对象与表单绑定,允许Yii2自动处理数据验证和填充。

5.4.5 配置路由

最后,确保你的URL管理器能够识别到ArticleControllercreate动作。通常,在config/web.phpurlManager组件中配置路由规则,但Yii2也支持通过控制器名/动作名的方式直接访问(如果启用了enablePrettyUrl和配置了.htaccess文件)。

  1. // config/web.php 示例路由配置
  2. 'urlManager' => [
  3. 'enablePrettyUrl' => true,
  4. 'showScriptName' => false,
  5. 'rules' => [
  6. // 其他路由规则...
  7. 'article/create' => 'article/create', // 可选配置,具体取决于你的URL管理策略
  8. ],
  9. ],

5.4.6 测试功能

完成以上步骤后,通过浏览器访问文章添加页面的URL(通常是http://yourproject.com/article/create),你应该能看到一个包含标题、内容、状态选择框和提交按钮的表单。填写表单并提交后,如果一切配置正确,数据将被保存到数据库中,并且浏览器将重定向到文章列表页面(或根据actionCreate方法中的重定向逻辑进行跳转),同时显示添加成功的消息。

总结

本章节详细介绍了在Yii2框架中实现“文章添加”功能的完整流程,包括模型、控制器、视图的创建以及路由的配置。通过这一迭代,你的Yii2项目已经具备了处理用户输入并存储到数据库的基本能力,为后续的功能开发奠定了坚实的基础。记得在开发过程中不断测试,确保每个功能都按预期工作。