国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

CodeIgniter自定義控制器MY_Controller用法分析

2024-05-04 23:42:23
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了CodeIgniter自定義控制器MY_Controller用法,結合實例形式分析了CodeIgniter自定義控制器MY_Controller的定義與使用技巧,需要的朋友可以參考下
 

本文實例講述了CodeIgniter自定義控制器MY_Controller用法。分享給大家供大家參考,具體如下:

Codeigniter所有的控制器都必須繼承CI_Controller類,但CI_Controller類位于system目錄下,不太方便修改。為方便做一些公用的處理,通常情況下我們會在core下創建MY_Controller,用來繼承CI_Controller,從而項目中所有的控制器繼承MY_Controller。

那么,MY_Controller 通常會做些什么呢?

所有的控制器都繼承了MY_Controller, MY_Controller常常會加載一些公用幫助函數、公用類庫,以及實現一些公用的方法。

公用的方法?公有的方法?

看到這些方法會意識到一個問題,如果方法是public的,那是否可以通過瀏覽器訪問到。答案是可以的!這樣不該讓用戶訪問到的方法讓用戶訪問到了。那設置protected吧。。。

備注:CI_Controller中寫public方法不會被訪問到,框架限制了CI_Controller中方法通過瀏覽器訪問。

隨著項目的不斷進展,MY_Controller中的公用方法會越來越多。如果此時要增加后臺管理的功能,所有的控制器依然繼承MY_Controller,那其中的很多方法可能不適用了。如果后臺需要的一些公用方法也寫在這里,這里將會變得混亂。

如何按模塊區分不同的控制器?

有兩種處理的方式,第一種是通過不同的公用控制器文件來區分,由控制器去決定繼承哪一個公用控制器,當然這里得引入公用文件。還有這種方式是可以通過對象的一個屬性來維護,不同的模塊賦予該屬性不同的對象。如:

<?php if ( ! defined('BASEPATH'))  exit('No direct script access allowed');class MY_Controller extends CI_Controller{ public function __construct($type = NULL) {   parent::__construct();   switch($type) {    case 'api' :     $this->load->library('api_helper', NULL, 'helper');     break;    case 'admin' :     $this->load->library('admin_helper', NULL, 'helper');      break;    default :     $this->load->library('app_helper', NULL, 'helper');      break   } }}/* End of file MY_Controller.php *//* Location: ./application/core/MY_Controller.php */

控制器調用MY_Controller構造函數并傳入type值,根據不同的type值會加載不同的類庫,然后給類定義一個統一的別名,方便處理。具體的library可以處理該模塊公用的方法或load公用的資源,相當于該模塊的一個公用類。當然處理方式也可以是直接通過路由中的目錄名或者控制器名稱來控制等等。

這樣避免了加載不同的文件,調用方法時只需要通過$this->helper對象調用。在仔細看看,可以發現不同模塊的公用類是放在library中,放在library或helper中都可以使用get_intance獲取控制器對象,但每次使用都需要獲取實例,相對麻煩,如果是模型呢?感覺也不太好。其中的公用方法有一些會跟業務邏輯相關,放在library感覺不太合適。

業務邏輯好像并沒有一個好的地方去實現,控制器的私有方法?模型?

先總結下上面的處理方法:

1、不同模塊之間可以按需加載以及實現自定義的公用方法,各個模塊之間互不影響。如果各模塊之間的公用方法比較多,也可以再去繼承一個公用的類。

2、公用方法放在library中,調用CI實例不方便。

3、如果不喜歡$this->herlper的調用方法,可以讓控制器去繼承不同的公用控制器,思路是一樣的,只是可能需要手動引入文件。

更多關于CodeIgniter相關內容感興趣的讀者可查看本站專題:《codeigniter入門教程》和《CI(CodeIgniter)框架進階教程

希望本文所述對大家基于CodeIgniter框架的PHP程序設計有所幫助。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东兰县| 察雅县| 礼泉县| 阜宁县| 山西省| 遵义县| 河西区| 涡阳县| 兰州市| 如东县| 绩溪县| 尤溪县| 若羌县| 长垣县| 玉龙| 太保市| 汪清县| 阳泉市| 藁城市| 邵武市| 娱乐| 响水县| 龙州县| 棋牌| 建瓯市| 河池市| 商南县| 大厂| 财经| 额敏县| 伊宁市| 清涧县| 平顺县| 福泉市| 六枝特区| 涡阳县| 永川市| 桐城市| 嘉义市| 武胜县| 新建县|