搜索
Yii2.0— 模块Nov 25, 2016 pm 02:09 PM
yii模块

模块是独立的软件单元,由模型, 视图, 控制器和其他支持组件组成, 终端用户可以访问在应用主体中已安装的模块的控制器, 模块被当成小应用主体来看待,和应用主体不同的是, 模块不能单独部署,必须属于某个应用主体。

创建模块

模块被组织成一个称为[[yii\base\Module::basePath|base path]]的目录, 在该目录中有子目录如controllers,models,views分别为对应控制器,模型,视图和其他代码,和应用非常类似。 如下例子显示一个模型的目录结构:

forum/
    Module.php                   模块类文件
    controllers/                 包含控制器类文件
        DefaultController.php    default 控制器类文件
    models/                      包含模型类文件
    views/                       包含控制器视图文件和布局文件
        layouts/                 包含布局文件
        default/                 包含DefaultController控制器视图文件
            index.php            index视图文件

模块类

每个模块都有一个继承[[yii\base\Module]]的模块类,该类文件直接放在模块的[[yii\base\Module::basePath|base path]]目录下, 并且能被 自动加载。当一个模块被访问,和 应用主体实例 类似会创建该模块类唯一实例,模块实例用来帮模块内代码共享数据和组件。

以下示例一个模块类大致定义:

namespace app\modules\forum; class Module extends \yii\base\Module { public function init() { parent::init(); $this->params['foo'] = 'bar'; 
// ...  其他初始化代码 ... } }

如果init()方法包含很多初始化模块属性代码, 可将他们保存在配置 并在init()中使用以下代码加载:

public function init() { parent::init(); // 从config.php加载配置来初始化模块 \Yii::configure($this, require(__DIR__ . '/config.php')); }

config.php配置文件可能包含以下内容,类似应用主体配置.

<?php return [ &#39;components&#39; => [ // list of component configurations ], &#39;params&#39; => [ // list of parameters ], ];

模块中的控制器

创建模块的控制器时,惯例是将控制器类放在模块类命名空间的controllers子命名空间中, 也意味着要将控制器类文件放在模块[[yii\base\Module::basePath|base path]]目录中的controllers子目录中。 例如,上小节中要在forum模块中创建post控制器,应像如下申明控制器类:

namespace app\modules\forum\controllers; use yii\web\Controller; class PostController extends Controller { // ... }

可配置[[yii\base\Module::controllerNamespace]]属性来自定义控制器类的命名空间, 如果一些控制器不再该命名空间下,可配置[[yii\base\Module::controllerMap]]属性让它们能被访问, 这类似于 应用主体配置 所做的。

模块中的视图

视图应放在模块的[[yii\base\Module::basePath|base path]]对应目录下的views目录, 对于模块中控制器对应的视图文件应放在views/ControllerID目录下, 其中ControllerID对应 控制器 ID. For example, if 例如,假定控制器类为PostController,目录对应模块[[yii\base\Module::basePath|base path]]目录下的views/post目录。

模块可指定 布局,它用在模块的控制器视图渲染。 布局文件默认放在views/layouts目录下,可配置[[yii\base\Module::layout]]属性指定布局名, 如果没有配置layout属性名,默认会使用应用的布局。

使用模块

要在应用中使用模块,只需要将模块加入到应用主体配置的[[yii\base\Application::modules|modules]]属性的列表中, 如下代码的应用主体配置 使用forum模块:

[ &#39;modules&#39; => [ &#39;forum&#39; => [ &#39;class&#39; => &#39;app\modules\forum\Module&#39;, // ... 模块其他配置 ... ], ], ]

[[yii\base\Application::modules|modules]] 属性使用模块配置数组,每个数组键为模块 ID, 它标识该应用中唯一的模块,数组的值为用来创建模块的 配置。

路由

和访问应用的控制器类似,路由 也用在模块中控制器的寻址, 模块中控制器的路由必须以模块ID开始,接下来为控制器ID和操作ID。 例如,假定应用使用一个名为forum模块,路由forum/post/index代表模块中post控制器的index操作, 如果路由只包含模块ID,默认为default的[[yii\base\Module::defaultRoute]] 属性来决定使用哪个控制器/操作, 也就是说路由forum可能代表forum模块的default控制器。

访问模块

在模块中,可能经常需要获取模块类的实例来访问模块ID,模块参数,模块组件等, 可以使用如下语句来获取:

$module = MyModuleClass::getInstance();

其中MyModuleClass对应你想要的模块类,getInstance()方法返回当前请求的模块类实例, 如果模块没有被请求,该方法会返回空,注意不需要手动创建一个模块类,因为手动创建的和Yii处理请求时自动创建的不同。

补充: 当开发模块时,你不能假定模块使用固定的ID,因为在应用或其他没模块中,模块可能会对应到任意的ID, 为了获取模块ID,应使用上述代码获取模块实例,然后通过$module->id获取模块ID。

也可以使用如下方式访问模块实例:

// 获取ID为 "forum" 的模块 $module = \Yii::$app->getModule('forum'); // 获取处理当前请求控制器所属的模块 $module = \Yii::$app->controller->module;

第一种方式仅在你知道模块ID的情况下有效,第二种方式在你知道处理请求的控制器下使用。

一旦获取到模块实例,可访问注册到模块的参数和组件,例如:

$maxPostCount = $module->params[&#39;maxPostCount&#39;];

引导启动模块

有些模块在每个请求下都有运行, [[yii\debug\Module|debug]] 模块就是这种, 为此将这种模块加入到应用主体的 [[yii\base\Application::bootstrap|bootstrap]] 属性中。

例如,如下示例的应用主体配置会确保debug模块每次都被加载:

[ &#39;bootstrap&#39; => [ &#39;debug&#39;, ], &#39;modules&#39; => [ &#39;debug&#39; => &#39;yii\debug\Module&#39;, ], ]

模块嵌套

模块可无限级嵌套,也就是说,模块可以包含另一个包含模块的模块,我们称前者为父模块,后者为子模块, 子模块必须在父模块的[[yii\base\Module::modules|modules]]属性中申明,例如:

namespace app\modules\forum; class Module extends \yii\base\Module { public function init() { parent::init(); $this->modules = [ &#39;admin&#39; => [ 
// 此处应考虑使用一个更短的命名空间 &#39;class&#39; => &#39;app\modules\forum\modules\admin\Module&#39;, ], ]; } }

在嵌套模块中的控制器,它的路由应包含它所有祖先模块的ID,例如forum/admin/dashboard/index代表 在模块forum中子模块admin中dashboard控制器的index操作。

最佳实践

模块在大型项目中常备使用,这些项目的特性可分组,每个组包含一些强相关的特性, 每个特性组可以做成一个模块由特定的开发人员和开发组来开发和维护。

在特性组上,使用模块也是重用代码的好方式,一些常用特性,如用户管理,评论管理,可以开发成模块, 这样在相关项目中非常容易被重用。


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何使用PHP框架Yii开发一个高可用的云备份系统如何使用PHP框架Yii开发一个高可用的云备份系统Jun 27, 2023 am 09:04 AM

随着云计算技术的不断发展,数据的备份已经成为了每个企业必须要做的事情。在这样的背景下,开发一款高可用的云备份系统尤为重要。而PHP框架Yii是一款功能强大的框架,可以帮助开发者快速构建高性能的Web应用程序。下面将介绍如何使用Yii框架开发一款高可用的云备份系统。设计数据库模型在Yii框架中,数据库模型是非常重要的一部分。因为数据备份系统需要用到很多的表和关

php如何使用Yii3框架?php如何使用Yii3框架?May 31, 2023 pm 10:42 PM

随着互联网的不断发展,Web应用程序开发的需求也越来越高。对于开发人员而言,开发应用程序需要一个稳定、高效、强大的框架,这样可以提高开发效率。Yii是一款领先的高性能PHP框架,它提供了丰富的特性和良好的性能。Yii3是Yii框架的下一代版本,它在Yii2的基础上进一步优化了性能和代码质量。在这篇文章中,我们将介绍如何使用Yii3框架来开发PHP应用程序。

Symfony vs Yii2:哪个框架更适合开发大型Web应用?Symfony vs Yii2:哪个框架更适合开发大型Web应用?Jun 19, 2023 am 10:57 AM

随着Web应用需求的不断增长,开发者们在选择开发框架方面也越来越有选择的余地。Symfony和Yii2是两个备受欢迎的PHP框架,它们都具有强大的功能和性能,但在面对需要开发大型Web应用时,哪个框架更适合呢?接下来我们将对Symphony和Yii2进行比较分析,以帮助你更好地进行选择。基本概述Symphony是一个由PHP编写的开源Web应用框架,它是建立

Yii2 vs Phalcon:哪个框架更适合开发显卡渲染应用?Yii2 vs Phalcon:哪个框架更适合开发显卡渲染应用?Jun 19, 2023 am 08:09 AM

在当前信息时代,大数据、人工智能、云计算等技术已经成为了各大企业关注的热点。在这些技术中,显卡渲染技术作为一种高性能图形处理技术,受到了越来越多的关注。显卡渲染技术被广泛应用于游戏开发、影视特效、工程建模等领域。而对于开发者来说,选择一个适合自己项目的框架,是一个非常重要的决策。在当前的语言中,PHP是一种颇具活力的语言,一些优秀的PHP框架如Yii2、Ph

Yii框架中的数据查询:高效地访问数据Yii框架中的数据查询:高效地访问数据Jun 21, 2023 am 11:22 AM

Yii框架是一个开源的PHPWeb应用程序框架,提供了众多的工具和组件,简化了Web应用程序开发的流程,其中数据查询是其中一个重要的组件之一。在Yii框架中,我们可以使用类似SQL的语法来访问数据库,从而高效地查询和操作数据。Yii框架的查询构建器主要包括以下几种类型:ActiveRecord查询、QueryBuilder查询、命令查询和原始SQL查询

yii如何将对象转化为数组或直接输出为json格式yii如何将对象转化为数组或直接输出为json格式Jan 08, 2021 am 10:13 AM

yii框架:本文为大家介绍了yii将对象转化为数组或直接输出为json格式的方法,具有一定的参考价值,希望能够帮助到大家。

Yii2编程指南:运行Cron服务的方法Yii2编程指南:运行Cron服务的方法Sep 01, 2023 pm 11:21 PM

如果您问“Yii是什么?”查看我之前的教程:Yii框架简介,其中回顾了Yii的优点,并概述了2014年10月发布的Yii2.0的新增功能。嗯>在这个使用Yii2编程系列中,我将指导读者使用Yii2PHP框架。在今天的教程中,我将与您分享如何利用Yii的控制台功能来运行cron作业。过去,我在cron作业中使用了wget—可通过Web访问的URL来运行我的后台任务。这引发了安全问题并存在一些性能问题。虽然我在我们的启动系列安全性专题中讨论了一些减轻风险的方法,但我曾希望过渡到控制台驱动的命令

PHP开发:使用 Yii2 和 GrapeJS 实现后台 CMS 和 前端可视化编辑PHP开发:使用 Yii2 和 GrapeJS 实现后台 CMS 和 前端可视化编辑Jun 15, 2023 pm 11:48 PM

在现代软件开发中,构建一个强大的内容管理系统(CMS)并不是一项容易的任务。不仅需要开发人员具备丰富的技能以及经验,还需要使用最先进的技术和工具来使其功能与性能达到最优化。本文介绍了如何使用Yii2和GrapeJS,两个流行的开源软件来实现后台CMS和前端可视化编辑。Yii2是一个流行的PHPWeb框架,它提供了丰富的工具和组件来快速构

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版