首页
技术小册
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.3.2 自定义小部件的MVC结构 在Yii2框架中,小部件(Widgets)是一种强大的工具,它们允许你将复杂的用户界面组件封装成可复用的代码块。小部件不仅简化了视图层的代码,还促进了代码的重用和模块化。然而,随着项目的扩展,仅仅使用Yii2内置的小部件可能无法满足所有需求,这时自定义小部件就显得尤为重要。在本节中,我们将深入探讨如何在Yii2中创建自定义小部件,并特别关注其MVC(Model-View-Controller)结构的实现,尽管传统上小部件更侧重于视图层,但通过合理的架构设计,我们可以将MVC的概念灵活地应用于小部件开发中。 #### 7.3.2.1 理解MVC在小部件中的应用 首先,需要澄清的是,Yii2框架本身遵循MVC架构模式,但这主要体现在应用程序的整体结构上,而不是单个小部件内部。然而,我们可以借鉴MVC的设计思想,在小部件内部实现类似的结构以提高其可维护性和可扩展性。 - **模型(Model)**:在小部件的上下文中,模型主要负责数据处理和业务逻辑。它可以是简单的属性集合,用于存储小部件的配置和状态,也可以是复杂的业务逻辑类,处理来自数据库或外部服务的数据。 - **视图(View)**:视图层负责小部件的展示。在Yii2中,这通常意味着渲染一个或多个HTML片段。视图可以接收来自模型的数据,并将其以用户友好的方式展示。 - **控制器(Controller)**:虽然传统上小部件不直接包含控制器,但我们可以将小部件的初始化、数据处理逻辑(在模型之前)等视为控制器的职责。这些操作决定了小部件如何响应外部请求或如何根据配置调整其行为。 #### 7.3.2.2 创建自定义小部件 为了实践上述概念,我们将从头开始创建一个简单的自定义小部件。假设我们需要一个显示用户信息的小部件,包括用户名、头像和简短介绍。 ##### 步骤 1: 定义小部件类 首先,你需要创建一个继承自`\yii\base\Widget`的类。在这个类中,我们将定义小部件的属性和方法。 ```php namespace app\widgets; use Yii; use yii\base\Widget; class UserInfoWidget extends Widget { public $userId; // 用户的ID // 初始化小部件 public function init() { parent::init(); // 这里可以执行一些初始化操作,比如验证$userId } // 渲染小部件 public function run() { // 获取用户数据(模拟从数据库或其他服务获取) $user = $this->getUserData(); // 渲染视图,并传递用户数据 return $this->render('userinfo', ['user' => $user]); } // 假设的方法,用于获取用户数据 protected function getUserData() { // 这里应该是数据库查询或其他逻辑来获取用户数据 // 为了示例,我们直接返回一个模拟的数组 return [ 'id' => $this->userId, 'username' => 'ExampleUser', 'avatarUrl' => 'path/to/avatar.jpg', 'bio' => 'A short introduction about the user.', ]; } } ``` ##### 步骤 2: 视图文件 接下来,在`views/widgets`目录下(如果没有,请创建它)创建一个名为`userinfo.php`的视图文件。这个文件将负责展示用户信息。 ```php <?php /* @var $user array */ ?> <div class="user-info"> <img src="<?= $user['avatarUrl'] ?>" alt="User Avatar"> <h3><?= htmlspecialchars($user['username']) ?></h3> <p><?= nl2br(htmlspecialchars($user['bio'])) ?></p> </div> ``` ##### 步骤 3: 在视图中使用小部件 现在,你可以在任何视图文件中使用这个小部件了。只需简单调用`\app\widgets\UserInfoWidget::widget()`方法,并传递相应的参数即可。 ```php <?= \app\widgets\UserInfoWidget::widget(['userId' => 1]) ?> ``` #### 7.3.2.3 深入MVC结构 虽然上面的示例没有显式地分离出MVC的所有组件,但我们可以通过一些改进来更好地体现MVC的思想。 - **模型(Model)**:我们可以创建一个专门的模型类来处理用户数据的获取和验证。这个模型可以被小部件或其他需要用户数据的组件重用。 - **视图(View)**:视图文件已经独立存在,但我们可以进一步分离出不同的视图模板以适应不同的展示需求。 - **控制器(Controller)**:虽然小部件本身不直接包含控制器,但我们可以将`run()`方法视为控制逻辑的一部分,负责数据的处理和视图的渲染。如果需要更复杂的逻辑处理,可以考虑将这部分逻辑抽象到单独的类中,通过小部件的依赖注入来管理。 #### 7.3.2.4 总结 通过上面的例子,我们可以看到,即使在Yii2框架的小部件开发中,MVC的概念也是可以被灵活运用的。虽然小部件主要关注于视图层的展示,但通过合理的架构设计,我们可以将业务逻辑、数据处理和视图展示分离,从而提高代码的可维护性和可扩展性。随着项目的增长,这种分离将变得更加重要,因为它有助于减少代码耦合,促进团队协作,并使得未来的功能扩展和重构变得更加容易。
上一篇:
7.3.1 继承Widget
下一篇:
7.4 项目实现迭代九:自定义首页幻灯片小部件
该分类下的相关小册推荐:
Magento2主题开发高级实战
Laravel(10.x)从入门到精通(十二)
PHP8入门与项目实战(4)
Laravel(10.x)从入门到精通(六)
Magento零基础到架构师(安装篇)
Magento零基础到架构师(系统管理)
剑指PHP(从入门到进阶)
Magento中文全栈二次开发
Magento零基础到架构师(库存管理)
PHP8入门与项目实战(7)
Laravel(10.x)从入门到精通(十八)
全面构建Magento2电商系统