CodeIgniter自訂控制器MY_Controller用法分析,codeigniter控制器_PHP教程

來源:互聯網
上載者:User

CodeIgniter自訂控制器MY_Controller用法分析,codeigniter控制器


本文執行個體講述了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程式設計有所協助。

您可能感興趣的文章:

  • Codeigniter控制器controller繼承問題執行個體分析
  • 2個Codeigniter檔案批量上傳控制器寫法例子
  • CodeIgniter鉤子用法執行個體詳解
  • CodeIgniter配置之database.php用法執行個體分析
  • CodeIgniter多語言實現方法詳解
  • CI(CodeIgniter)模型用法執行個體分析
  • CodeIgniter視圖使用注意事項
  • CodeIgniter讀寫分離實現方法詳解
  • CI(CodeIgniter)簡單統計訪問人數實現方法
  • CodeIgniter控制器之商務邏輯執行個體分析

http://www.bkjia.com/PHPjc/1094761.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1094761.htmlTechArticleCodeIgniter自訂控制器MY_Controller用法分析,codeigniter控制器 本文執行個體講述了CodeIgniter自訂控制器MY_Controller用法。分享給大家供大家參考,...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.