日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【译】CodeIgniter HMVC模块扩展使用文档

發布時間:2023/12/10 c/c++ 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【译】CodeIgniter HMVC模块扩展使用文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CodeIgniter HMVC擴展說明

原文地址:Modular Extensions - HMVC

模塊擴展——HMVC

模塊擴展讓CodeIgniter框架模塊化。模塊是一組獨立的組件(通常有模型、控制器和視圖),它們被分類在應用模塊的子文件夾中,并且能夠直接拖到其他的CodeIgniter應用中。

HMVC的意思是分層模型視圖控制器。

模塊控制器能夠作為普通的控制器或者HMVC控制器使用,它們也能夠被當做小部件幫助你開發一部分視圖。

模塊擴展安裝

  • 安裝純凈的CI框架

  • 設置$config['base_url']變量

  • 訪問URL /index.php/welcome看到歡迎界面

  • 將模塊擴展的third_party文件拖入application/third_party目錄

  • 將模塊擴展的core文件放入application/core目錄,MY_Controller.php文件可以不放進去,除非你想自己寫一個你自己的控制器繼承

  • 訪問URL /index.php/welcome看到歡迎界面

  • 創造模塊目錄結構application/modules/welcome/controllers

  • 將控制器文件application/controllers/welcome.php移動至application/modules/welcome/controllers/welcome.php

  • 訪問URL /index.php/welcome看到歡迎界面

  • 創建目錄application/modules/welcome/views

  • 11. 將視圖文件application/views/welcome_message.php移動至application/modules/welcome/views/welcome_message.php
    12. 訪問URL /index.php/welcome看到歡迎界面

    你現在應該擁有了一個正在運行的模塊擴展了。

    譯者注:

    為了便于大家理解HMVC,我這里展示使用HMVC前和使用HMVC后的目錄結構

    使用HMVC前:

    使用HMVC后:

    安裝提示

    • 第1~3步告訴你如何安裝一個標準的CI框架,如果你已經安裝了,跳至步驟4

    • 第4~5步告訴你普通的CI框架在安裝了MX之后仍然正常運行,它不應該打斷正常的CI框架安裝

    • 第6~8步說明MX和CI控制器一起正常工作,控制器被移入welcome模塊,視圖文件仍在CI的application/views目錄,MX能夠在好幾個地方發現模塊資源,包括應用目錄

    • 第9~11步說明MX和在welcome模塊中的控制器以及視圖一起工作,在application/controllers以及application/views目錄中此時應該沒有文件了。

    FAQ

    Q: 什么是模塊?我為什么要使用他們?

    A: 參見維基百科:

    • http://en.wikipedia.org/wiki/Module)

    • http://en.wikipedia.org/wiki/Modular_programming)

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

    Q: 什么是模塊化HMVC,為什么我應該使用它?

    A: 模塊化 HMVC = Multiple MVC triads

    當你需要載入視圖和視圖中的數據的時候,這將是非常有用的。考慮添加一個購物車到一個頁面中,這個購物車需要它自己的控制器,這個控制器要調用一個模型來獲取購物車數據。然后控制器需要將數據載入到視圖中。因此,和在主控制器處理這個頁面和購物車不同,購物車MVC能夠直接在頁面中加載。這個主控制器不需要知道購物車MVC,并且和購物車MVC是完全隔離的。

    在CI框架中,我們不能夠在一次請求中調用多個控制器。因此,為了實現HMVC,我們不得不模擬控制器的行為。這用類庫可以做到或者使用這個“模塊擴展HMVC”。

    使用一個類庫和一個“模塊擴展HMVC”類不同之處在于:

  • 不需要在HMVC中獲取和使用CI實例

  • HMVC類存儲在modules目錄中而不是類庫目錄中

  • Q: 模塊擴展HMVC和模塊分離是一樣的么?

    A: 是,也可以說不是。和模塊分離類似,模塊擴展使得模塊變得“可便攜的”。例如,如果你有一個漂亮的自包含MVC文件集,你能夠將你的MVC文件加入到另一個項目中,僅僅通過復制一個目錄就行了。所有文件都在同一個地方而不是散布在model、view 和controller文件夾。

    模塊化HMVC意味著模塊化MVC triads。 模塊分離和模塊擴展讓相關的控制器、模型、類庫、視圖等等文件能夠被打包在模塊子目錄中,并且能夠像一個小型應用那樣使用。但是,模塊擴展更進一步,它允許這些模塊互相通信。你能夠不用通過與http交互得到控制器的輸出內容。

    特點

    所有的控制器都包含一個$autoload類變量,這個類變量擁有一個運行時優先載入的條目(item)數組。這個功能能夠和 module/config/autoload.php一起使用,然而,使用$autoload變量僅僅在對應的控制器中起作用。

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

    Modules::$locations可以在application/config.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()方法到你的控制器中,你能夠阻止不需要的訪問然后重定向或者發送一個錯誤,這些隨你。

    注意:

    要使用HMVC功能,例如Modules::run(),控制器必須繼承MX_Controller類。

    僅僅使用分開的模塊而不是HMVC功能,控制器可以繼承CodeIgniter類。

    你必須在控制器中使用PHP5樣式的構造函數,例如:

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

    構造函數并不是必須的,除非你想在控制器創建的時候載入或者處理什么東西。

    所有的MY_extension類庫應該包含(需要)他們同等的MX類庫文件,并且繼承它們同等的MX_class。

    每一個模塊可以包含一個config/routes.php文件,在文件中定義該模塊的路由和默認控制器:

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

    控制器可以從application/controllers子目錄中載入。

    控制器也可以從module/controllers子目錄中載入。

    資源能夠能夠跨控制器載入,例如: $this->load->model('module/model');

    Modules::run()被設計成返回部分視圖,并且它將會從控制器返回緩存輸出(一個視圖)。使用modules::run語法是一個URI類型的片段字符串和無限的變量。

    <?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(),PHP5的方法鏈也可以用在任何被MX加載的對象中,例如: $this->load->library(‘validation’)->run()。

    載入模塊的語言文件推薦使用載入方法,該方法將會傳遞一個激活的模塊名稱到一個語言實例,例如:$this->load->language('language_file');

    PHP5的spl_autoload特性允許你自由地擴展你的控制器、模塊和來自application/core或者application/libraries基本類的的類庫,不需要考慮顯式包含他們。

    類庫加載器也被更新從而適應一些CI的特性,例如:類庫別名能夠和模塊別名一樣的方式接受,并且從模塊配置目錄中載入配置文件作為類庫的參數(例如:form_validation.php),這項特性也被加了進來。

    $config = $this->load->config(‘config_file’),返回已加載的數組到變量中。

    模塊和類庫也能夠從他們各自的應用目錄的子目錄中加載。

    在用MX使用表單驗證時,你將需要繼承CI_Form_validation類,如下所示:

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

    在將目前的控制器作為$CI變量賦值給表單驗證類庫之前。這將讓你的回調函數正常工作。

    <?php class Xyz extends MX_Controller {function __construct(){parent::__construct();$this->load->library('form_validation');$this->form_validation->CI =& $this;} }

    部分視圖

    使用模塊作為視圖的一部分在一個視圖中使用是很容易的:

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

    總結

    以上是生活随笔為你收集整理的【译】CodeIgniter HMVC模块扩展使用文档的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。