bitmannl/codeigniter-modular-extensions

此软件包最新版本(2.0.1)没有提供许可证信息。

使用 Composer 安装 CodeIgniter Modular Extensions HMVC(WireDesignz)

2.0.1 2022-02-22 10:01 UTC

This package is not auto-updated.

Last update: 2024-09-17 23:40:27 UTC


README

支持 Modular Extensions - HMVC 的发展

Support development

Modular Extensions - HMVC

Modular Extensions 使 CodeIgniter PHP 框架模块化。模块是一组独立的组件,通常是模型、控制器和视图,它们被安排在应用程序的模块子目录中,可以插入到其他 CodeIgniter 应用程序中。

HMVC 代表分层模型视图控制器。

模块控制器可以用作普通控制器或 HMVC 控制器,并可作为小部件使用,帮助您构建视图部分。

功能

所有控制器都可以包含一个 $autoload 类变量,该变量包含在运行构造函数之前要加载的项目数组。这可以与模块/config/autoload.php 一起使用,但仅当使用 $autoload 变量时才对特定控制器有效。

:::php
<?php     
class Xyz extends MX_Controller 
{
	$autoload = array(
		'helper'    => array('url', 'form'),
		'libraries' => array('email'),
	);
}

可以在应用程序/config.php 文件中设置 Modules::$locations 数组。例如

:::php
<?php
$config['modules_locations'] = array(
    APPPATH.'modules/' => '../modules/',
);

Modules::run() 输出被缓冲,因此任何从控制器返回或直接输出的数据都被捕获并返回给调用者。特别是,$this->load->view() 可以像在普通控制器中使用一样使用,无需返回。

可以使用 $this->load->module('module/controller'); 或简单地 $this->load->module('module');(如果控制器名称与模块名称匹配)将控制器加载为其他控制器的类变量。

然后可以像库一样使用任何已加载的模块控制器,例如:$this->controller->method(),但它可以独立于调用者访问自己的模型和库。

所有模块控制器都可以通过 URL 通过 module/controller/method 或简单地 module/method 访问(如果模块和控制器名称匹配)。如果您在控制器中添加了 _remap() 方法,您可以防止从 URL 不必要地访问它们,并按您喜欢的方式进行重定向或标记错误。

注意

要使用 HMVC 功能,如 Modules::run(),控制器必须扩展 MX_Controller 类。

要仅使用模块化分离,而不使用 HMVC,控制器将扩展 CodeIgniter Controller 类。

您必须在控制器中使用 PHP5 风格的构造函数。例如

:::php
<?php
class Xyz extends MX_Controller 
{
	function __construct()
	{
		parent::__construct();
	}
}

除非您需要加载或处理在控制器首次创建时需要的东西,否则不需要构造函数。

所有 MY_ 扩展库都应该包含(要求)其等效的 MX 库文件,并扩展其等效的 MX_ 类

每个模块可能包含一个 config/routes.php 文件,其中可以使用以下内容定义该模块的路由和默认控制器

:::php
<?php
$route['module_name'] = 'controller_name';

可以从应用程序/controllers 子目录中加载控制器。

也可以从模块/controllers 子目录中加载控制器。

可以在模块之间交叉加载资源。例如:$this->load->model('module/model');

Modules::run() 是为返回视图部分而设计的,它将从控制器返回缓冲输出(视图)。使用 modules::run 的语法是 URI 风格的分割字符串和无限制的变量。

:::php
<?php
/** module and controller names are different, you must include the method name also, including 'index' **/
modules::run('module/controller/method', $params, $...);

/** module and controller names are the same but the method is not 'index' **/
modules::run('module/method', $params, $...);

/** module and controller names are the same and the method is 'index' **/
modules::run('module', $params, $...);

/** Parameters are optional, You may pass any number of parameters. **/

要在一个控制器中调用模块控制器,您可以使用 $this->load->module() 或 Modules::load(),MX 提供的对象可以使用 PHP5 方法链。

为了加载模块的语言,建议使用Loader方法,该方法会将活动模块名称传递给Lang实例;例如:$this->load->language('language_file');

PHP5的spl_autoload功能允许您自由扩展控制器、模型和库,而无需专门包含或要求它们,从application/core或application/libraries的基类。

库加载器也已更新,以适应一些CI 1.7功能:例如,库别名以与模型别名相同的方式接受,并添加了从模块配置目录加载配置文件作为库参数(例如form_validation.php)。

$config = $this->load->config(‘config_file’), 将加载的配置数组返回到您的变量。

模型和库也可以从各自的application目录的子目录中加载。

当使用MX进行表单验证时,您需要像下面这样扩展CI_Form_validation类,

:::php
<?php
/** application/libraries/MY_Form_validation **/ 
class MY_Form_validation extends CI_Form_validation 
{
	public $CI;
}

在将当前控制器作为$CI变量分配给表单验证库之前。这将使您的回调方法正常工作。(这已在CI论坛上讨论过)。

:::php
<?php
class Xyz extends MX_Controller 
{
	function __construct()
	{
		parent::__construct();

		$this->load->library('form_validation');
		$this->form_validation->CI =& $this;
	}
}

视图部分

在视图中使用模块作为视图部分,就像编写

:::php
<?php echo Modules::run('module/controller/method', $param, $...); ?> 

参数是可选的,您可以传递任意数量的参数。

模块扩展安装

  1. 从干净的CI安装开始
  2. 正确设置$config[‘base_url’]以匹配您的安装
  3. 访问URL /index.php/welcome => 显示欢迎使用CodeIgniter
  4. 将模块扩展的third_party文件放入application/third_party目录
  5. 将模块扩展的核心文件放入application/core,MY_Controller.php文件不是必需的,除非您希望创建自己的控制器扩展
  6. 访问URL /index.php/welcome => 显示欢迎使用CodeIgniter
  7. 创建模块目录结构application/modules/welcome/controllers
  8. 将控制器application/controllers/welcome.php移动到application/modules/welcome/controllers/welcome.php
  9. 访问URL /index.php/welcome => 显示欢迎使用CodeIgniter
  10. 创建目录application/modules/welcome/views
  11. 将视图application/views/welcome_message.php移动到application/modules/welcome/views/welcome_message.php
  12. 访问URL /index.php/welcome => 显示欢迎使用CodeIgniter

现在您应该有一个运行的模块扩展安装。

安装指南提示

-步骤1-3告诉您如何使标准的CI安装正常工作 - 如果您有一个干净/经过测试的CI安装,请跳到步骤4。

-步骤4-5显示安装MX后正常CI仍然可以工作 - 它不应干扰正常的CI设置。

-步骤6-8显示MX与CI一起工作 - 控制器已移动到“welcome”模块,视图文件仍然位于CI应用程序的views目录中 - MX可以在多个位置找到模块资源,包括应用程序目录。

-步骤9-11显示MX在与“welcome”模块的控制器和视图一起工作 - 应用程序控制器或views目录中不应有任何文件。

常见问题解答

问题:什么是模块?为什么我应该使用它们?

答案:(http://zh.wikipedia.org/wiki/%E6%A8%A1%E5%9D%97

http://zh.wikipedia.org/wiki/%E6%A8%A1%E5%9D%97%E7%BC%96%E7%A8%8B

http://blog.fedecarg.com/2008/06/28/a-modular-approach-to-web-development

问题:什么是模块化的HMVC,为什么我应该使用它?

答案:模块化HMVC = 多个MVC三元组的层次结构

当您需要在视图中加载视图及其数据时,这非常有用。考虑向页面添加购物车。购物车需要自己的控制器,该控制器可能需要调用模型来获取购物车数据。然后控制器需要将数据加载到视图中。因此,而不是主控制器处理页面和购物车,购物车MVC可以直接在页面中加载。主控制器不需要知道它,并且与之完全隔离。

在CI中,我们无法在每个请求中调用多个控制器。因此,为了实现HMVC,我们必须模拟控制器。这可以通过库或使用此“模块扩展HMVC”贡献来完成。

使用库和使用“模块化HMVC”HMVC类的区别是

  1. 在HMVC类中无需获取和使用CI实例
  2. HMVC类存储在模块目录中,而不是库目录。

问:模块扩展HMVC与模块分离是否相同?

答:是,也不是。和模块分离一样,模块扩展使得模块可以“便携”到其他安装中。例如,如果你创建了一个完美的自包含的模型-控制器-视图文件集,你可以通过复制一个文件夹将那个MVC引入另一个项目——所有内容都集中在一个地方,而不是分散在模型、视图和控制器的文件夹中。

模块化HMVC意味着模块化的MVC三元组。模块分离和模块扩展允许将相关的控制器、模型、库、视图等分组在模块目录中,并像迷你应用程序一样使用。但是,模块扩展更进一步,允许这些模块“对话”。你可以获取控制器输出,而无需再次通过HTTP接口。