首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
7.1 调用小部件的两种方式
7.1.1 调用widget()方法使用小部件DatePicker
7.1.2 调用begin()和end()方法使用小部件ActiveForm
7.2 项目实现迭代八:使用ActiveForm小部件替换添加文章视图
7.2.1 调用小部件ActiveForm
7.2.2 “文章标题”文本输入框
7.2.3 “文章栏目”下拉列表框
7.2.4 “文章图片”上传文件输入框
7.2.5 “内容”文本输入域
7.3 自定义小部件
7.3.1 继承Widget
7.3.2 自定义小部件的MVC结构
7.4 项目实现迭代九:自定义首页幻灯片小部件
7.5 项目实现迭代十:分页显示列表页
7.5.1 分页组件Pagination
7.5.2 新闻中心列表页实现数据填充
7.5.3 分页的超链接列表小部件LinkPager
8.1 初识资源包类
8.2 Yii2框架资源管理代码分析
8.2.1 视图中注册资源包类
8.2.2 注册资源文件
8.2.3 输出缓冲区的数据
8.3 AssetBundle类的成员属性
8.4 项目实现迭代十一:本书配套项目实现前端资源管理
8.4.1 实现首页前端资源管理
8.4.2 实现新闻中心列表页前端资源管理
9.1 模型中编写验证规则
9.2 控制器中安全赋值
9.3 控制器中触发验证
9.4 视图中提取错误信息
9.5 项目实现迭代十二:完成“添加文章”页面中的模型验证
10.1 AJAX简介
10.2 传统的JavaScript实现AJAX验证
10.2.1 创建AJAX引擎XMLHttpRequest对象
10.2.2 创建HTTP请求
10.2.3 设置响应HTTP请求状态变化的方法
10.2.4 设置获取服务器返回数据的语句
10.2.5 发送HTTP请求
10.3 jQuery实现AJAX验证
10.4 项目实现迭代十三:完成“添加用户”页面的AJAX验证
11.1 用户登录-表单模型
11.2 用户登录-客户端验证
11.2.1 ActiveForm实现客户端验证代码分析
11.2.2 项目实现迭代十四:完成登录页面的客户端验证
11.3 模型中的自定义方法作为rules()验证器
11.4 用于验证用户名和密码的身份类UserIdentity
11.5 项目实现迭代十五:完成用户登录
11.6 保存用户登录状态的yii\web\User类
12.1 访问控制技术综述
12.2 RBAC简介
12.3 RBAC需求分析及功能概述
12.4 项目实现迭代十六:最简方式实现RBAC
12.4.1 数据库设计
12.4.2 用户管理
12.4.3 角色管理
12.4.4 权限管理
12.4.5 用户—角色配置管理
12.4.6 角色—权限配置管理
12.5 项目实现迭代十七:使用yii\rbac\DbManager实现 RBAC
12.5.1 基本概念
12.5.2 用户管理
12.5.3 角色管理
12.5.4 权限管理
12.5.5 权限管理系统验证
12.6 项目实现迭代十八:使用yii2-admin扩展实现RBAC
12.6.1 配置
12.6.2 使用的数据库表
12.6.3 路由列表
12.6.4 角色列表
12.6.5 用户列表
12.6.6 菜单列表
12.6.7 集成AdminLTE后台主题及菜单展示
12.6.8 基于存取控制过滤器(ACF)的用户登录页面
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(中)
小册名称:Yii2框架从入门到精通(中)
### 7.2.3 “文章栏目”下拉列表框 在Web开发中,尤其是在使用Yii2框架构建内容管理系统(CMS)或博客平台时,实现一个功能完善的“文章栏目”(或称为“分类”)下拉列表框是必不可少的一部分。这一功能允许用户(无论是管理员还是普通用户,视权限而定)在发布或编辑文章时,能够轻松选择文章所属的栏目,从而实现内容的组织化和分类管理。本章节将详细介绍如何在Yii2框架中创建并集成一个“文章栏目”下拉列表框,包括数据库设计、模型建立、视图渲染以及控制器逻辑处理等方面。 #### 7.2.3.1 数据库设计 首先,我们需要为“文章栏目”设计数据库表。通常,这样的表会包含几个基本字段:ID(主键)、栏目名称、描述(可选)、创建时间、更新时间以及状态(用于标记栏目是否可用)。以下是一个简单的SQL建表语句示例: ```sql CREATE TABLE `article_category` ( `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL COMMENT '栏目名称', `description` TEXT COMMENT '栏目描述', `created_at` INT UNSIGNED NOT NULL COMMENT '创建时间', `updated_at` INT UNSIGNED NOT NULL COMMENT '更新时间', `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态:1-启用,0-禁用' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章栏目表'; ``` 在这个表中,`created_at`和`updated_at`字段通常使用UNIX时间戳来存储时间信息,便于后续的排序和筛选操作。`status`字段用于控制栏目的可用性,增强了系统的灵活性。 #### 7.2.3.2 模型建立 在Yii2中,每个数据库表都应该对应一个模型(Model),它封装了与数据库表交互的逻辑。对于`article_category`表,我们可以创建一个`ArticleCategory`模型类。使用Gii工具可以快速生成这个模型,但手动创建也是一个很好的学习过程。 在`models`目录下创建`ArticleCategory.php`文件,并定义模型类: ```php namespace app\models; use Yii; class ArticleCategory extends \yii\db\ActiveRecord { /** * {@inheritdoc} */ public static function tableName() { return '{{%article_category}}'; } /** * {@inheritdoc} */ public function rules() { return [ [['name'], 'required'], [['name'], 'string', 'max' => 255], [['description'], 'string'], [['created_at', 'updated_at', 'status'], 'integer'], ]; } // 可以添加其他方法,如获取所有可用栏目 public static function getActiveCategories() { return self::find()->where(['status' => 1])->all(); } } ``` 这里,`tableName`方法定义了模型对应的数据库表名(支持表前缀),`rules`方法定义了验证规则,确保数据的合法性和完整性。`getActiveCategories`方法用于获取所有启用的栏目,这在渲染下拉列表框时非常有用。 #### 7.2.3.3 视图渲染 在Yii2中,视图(View)负责展示数据给用户。为了渲染“文章栏目”下拉列表框,我们需要在相应的表单视图中添加HTML代码和Yii2的表单组件。 假设我们在`views/article/create.php`或`views/article/update.php`视图中处理文章的创建或更新,可以添加以下代码来渲染下拉列表框: ```php use yii\helpers\Html; use yii\widgets\ActiveForm; use app\models\ArticleCategory; /* @var $this yii\web\View */ /* @var $model app\models\Article */ /* @var $form yii\widgets\ActiveForm */ $form = ActiveForm::begin(); // ... 其他表单字段 echo $form->field($model, 'category_id')->dropDownList( ArrayHelper::map(ArticleCategory::getActiveCategories(), 'id', 'name'), ['prompt' => '请选择文章栏目'] ); // ... 其他表单字段 ActiveForm::end(); ``` 这里,`dropDownList`方法用于生成下拉列表框,它接受两个主要参数:第一个参数是一个数组,定义了选项的键值对(这里使用`ArrayHelper::map`方法从`ArticleCategory`模型中获取所有启用的栏目,并映射其`id`为键,`name`为值);第二个参数是一个数组,可以包含额外的HTML属性,如`prompt`用于显示一个空的提示选项。 #### 7.2.3.4 控制器逻辑处理 最后,在控制器中处理文章数据的创建或更新时,需要确保能够正确处理从下拉列表框提交的`category_id`字段。 以`ArticleController`中的`create`和`update`动作为例,通常你会在这些动作中看到类似以下的代码片段,它们处理表单的提交: ```php // 假设是ArticleController的create或update动作 public function actionCreate() { $model = new Article(); if ($model->load(Yii::$app->request->post()) && $model->save()) { // 数据保存成功后的逻辑 return $this->redirect(['view', 'id' => $model->id]); } return $this->render('create', [ 'model' => $model, ]); } // update动作类似,但会先根据ID加载文章模型 ``` 在这个例子中,`$model->load(Yii::$app->request->post())`负责将请求中的数据填充到模型实例中,包括从下拉列表框提交的`category_id`。然后,调用`$model->save()`方法将模型数据保存到数据库中。 #### 总结 通过以上步骤,我们成功地在Yii2框架中创建并集成了“文章栏目”下拉列表框。这一功能不仅提升了用户体验,还使得文章内容的分类管理变得更加便捷和高效。在实际的项目开发中,你可能还需要根据具体需求对下拉列表框进行扩展,比如添加搜索功能、支持多级分类等。不过,这些高级功能通常都建立在上述基础之上的,掌握了基本原理后,再学习这些扩展功能将会更加容易。
上一篇:
7.2.2 “文章标题”文本输入框
下一篇:
7.2.4 “文章图片”上传文件输入框
该分类下的相关小册推荐:
Laravel(10.x)从入门到精通(六)
Laravel(10.x)从入门到精通(三)
经典设计模式PHP版
ThinkPHP项目开发实战
全面构建Magento2电商系统
PHP高并发秒杀入门与实战
全栈工程师修炼指南
Magento零基础到架构师(安装篇)
PHP底层原理及源码分析
Laravel(10.x)从入门到精通(十五)
Laravel(10.x)从入门到精通(五)
Laravel(10.x)从入门到精通(二)