首页
技术小册
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.1 继承Widget:深入Yii2的组件化开发 在Yii2框架中,`Widget`是一种非常重要的组件,它允许开发者将复杂的HTML、JavaScript、CSS以及PHP逻辑封装成可复用的单元。通过继承`Widget`类,你可以创建自定义的Widget,以适应项目中特定的功能需求或UI设计。本章将详细探讨如何在Yii2中继承`Widget`类,以及如何利用继承来扩展或定制Widget的功能。 #### 7.3.1.1 理解Widget基础 在深入讨论如何继承`Widget`之前,先简要回顾一下Widget的基本概念和使用方式。Widget是Yii2中的一个特殊组件,它主要用于生成复杂的用户界面。与Controller和Model不同,Widget不直接处理请求或数据验证,而是专注于界面的渲染。Widget可以被嵌入到视图(View)中,也可以在控制器(Controller)中作为组件被使用。 Yii2的`Widget`类提供了两个主要的方法:`init()`和`run()`。`init()`方法用于初始化Widget的属性或执行一些必要的设置,而`run()`方法则包含了Widget的核心逻辑,比如渲染HTML代码。通常,开发者不需要直接调用`run()`方法,因为Yii2的渲染机制会自动调用它。 #### 7.3.1.2 创建自定义Widget 要创建一个自定义的Widget,你需要继承Yii2的`\yii\base\Widget`类,并在你的类中定义所需的属性和方法。以下是一个简单的自定义Widget示例,用于生成一个带有标题和内容的HTML区块: ```php namespace app\components; use yii\base\Widget; class MyBlockWidget extends Widget { public $title; public $content; public function init() { parent::init(); // 可以在这里进行额外的初始化工作 } public function run() { return $this->render('myBlock', [ 'title' => $this->title, 'content' => $this->content, ]); } // 假设你有一个名为myBlock的视图文件位于@app/views/myBlock.php } ``` 在这个例子中,`MyBlockWidget`有两个公共属性:`$title`和`$content`,分别用于存储区块的标题和内容。`run()`方法使用`$this->render()`来渲染一个视图文件,该视图文件定义了区块的HTML结构。注意,这里假设你已经有一个名为`myBlock.php`的视图文件位于`@app/views/`目录下,它接受`$title`和`$content`作为参数。 #### 7.3.1.3 继承与扩展Widget 当你需要基于现有的Widget进行扩展或修改时,可以通过继承该Widget类来实现。继承允许你保留原Widget的功能,并添加新的功能或修改现有功能。以下是一个继承`MyBlockWidget`并添加额外功能的示例: ```php namespace app\components; class EnhancedBlockWidget extends MyBlockWidget { public $borderColor = 'black'; // 新增边框颜色属性 public function run() { // 调用父类的run()方法,确保基本区块被渲染 $content = parent::run(); // 假设我们想在返回的HTML中添加边框样式 // 这里只是示例,实际中可能需要通过CSS类或内联样式来实现 $content = "<div style='border: 2px solid {$this->borderColor};'>{$content}</div>"; return $content; } } ``` 在这个例子中,`EnhancedBlockWidget`继承了`MyBlockWidget`,并添加了一个新的公共属性`$borderColor`用于设置边框颜色。在`run()`方法中,我们首先调用了父类的`run()`方法来渲染基本的区块内容,然后通过字符串操作给这个区块添加了边框样式。请注意,这种方法虽然简单,但通常不推荐直接在HTML字符串上进行操作,因为它破坏了MVC架构的分离原则。更推荐的做法是通过CSS类来管理样式。 #### 7.3.1.4 最佳实践与注意事项 - **保持Widget的独立性**:尽量让Widget不依赖于特定的视图或控制器,以便它们可以在项目的任何地方重用。 - **利用视图文件**:将Widget的HTML结构放在视图文件中,而不是直接在`run()`方法中硬编码。这样做可以提高代码的可维护性和可读性。 - **使用参数传递**:通过Widget的公共属性来传递必要的数据,而不是在实例化时直接调用方法。这有助于保持Widget的灵活性和可扩展性。 - **考虑性能影响**:虽然Widget提供了强大的组件化功能,但过度使用或不当使用可能会导致性能问题。务必评估每个Widget对页面加载时间的影响。 - **遵守Yii2的命名规范**:为了保持代码的一致性和可读性,请遵守Yii2的命名规范,包括类名、属性名和方法名的命名。 #### 7.3.1.5 实际应用场景 自定义Widget在Yii2项目中有着广泛的应用场景,包括但不限于: - **表单组件**:创建可复用的表单输入字段或表单布局。 - **导航菜单**:生成动态或静态的导航菜单。 - **广告模块**:在网站的多个页面上展示广告。 - **侧边栏或工具条**:为网站提供额外的信息或功能入口。 - **数据展示组件**:以表格、列表或图表的形式展示数据。 通过继承Yii2的`Widget`类并充分利用其提供的灵活性和可扩展性,你可以轻松地创建出满足项目需求的自定义Widget,从而提升开发效率和项目的可维护性。
上一篇:
7.3 自定义小部件
下一篇:
7.3.2 自定义小部件的MVC结构
该分类下的相关小册推荐:
全栈工程师修炼指南
经典设计模式PHP版
Laravel(10.x)从入门到精通(十九)
Laravel(10.x)从入门到精通(十七)
Laravel(10.x)从入门到精通(十五)
PHP合辑5-SPL标准库
全面构建Magento2电商系统
PHP程序员的设计模式
PHP合辑3-数组函数
Laravel(10.x)从入门到精通(七)
Laravel(10.x)从入门到精通(四)
PHP8入门与项目实战(1)