溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MY_Controller如何在CodeIgniter中使用

發(fā)布時(shí)間:2021-04-01 16:43:44 來(lái)源:億速云 閱讀:176 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)MY_Controller如何在CodeIgniter中使用,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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

那么,MY_Controller 通常會(huì)做些什么呢?

所有的控制器都繼承了MY_Controller, MY_Controller常常會(huì)加載一些公用幫助函數(shù)、公用類庫(kù),以及實(shí)現(xiàn)一些公用的方法。

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

看到這些方法會(huì)意識(shí)到一個(gè)問(wèn)題,如果方法是public的,那是否可以通過(guò)瀏覽器訪問(wèn)到。答案是可以的!這樣不該讓用戶訪問(wèn)到的方法讓用戶訪問(wèn)到了。那設(shè)置protected吧。。。

備注:CI_Controller中寫(xiě)public方法不會(huì)被訪問(wèn)到,框架限制了CI_Controller中方法通過(guò)瀏覽器訪問(wèn)。

隨著項(xiàng)目的不斷進(jìn)展,MY_Controller中的公用方法會(huì)越來(lái)越多。如果此時(shí)要增加后臺(tái)管理的功能,所有的控制器依然繼承MY_Controller,那其中的很多方法可能不適用了。如果后臺(tái)需要的一些公用方法也寫(xiě)在這里,這里將會(huì)變得混亂。

如何按模塊區(qū)分不同的控制器?

有兩種處理的方式,第一種是通過(guò)不同的公用控制器文件來(lái)區(qū)分,由控制器去決定繼承哪一個(gè)公用控制器,當(dāng)然這里得引入公用文件。還有這種方式是可以通過(guò)對(duì)象的一個(gè)屬性來(lái)維護(hù),不同的模塊賦予該屬性不同的對(duì)象。如:

<?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 */

控制器調(diào)用MY_Controller構(gòu)造函數(shù)并傳入type值,根據(jù)不同的type值會(huì)加載不同的類庫(kù),然后給類定義一個(gè)統(tǒng)一的別名,方便處理。具體的library可以處理該模塊公用的方法或load公用的資源,相當(dāng)于該模塊的一個(gè)公用類。當(dāng)然處理方式也可以是直接通過(guò)路由中的目錄名或者控制器名稱來(lái)控制等等。

這樣避免了加載不同的文件,調(diào)用方法時(shí)只需要通過(guò)$this->helper對(duì)象調(diào)用。在仔細(xì)看看,可以發(fā)現(xiàn)不同模塊的公用類是放在library中,放在library或helper中都可以使用get_intance獲取控制器對(duì)象,但每次使用都需要獲取實(shí)例,相對(duì)麻煩,如果是模型呢?感覺(jué)也不太好。其中的公用方法有一些會(huì)跟業(yè)務(wù)邏輯相關(guān),放在library感覺(jué)不太合適。

業(yè)務(wù)邏輯好像并沒(méi)有一個(gè)好的地方去實(shí)現(xiàn),控制器的私有方法?模型?

先總結(jié)下上面的處理方法:

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

2、公用方法放在library中,調(diào)用CI實(shí)例不方便。

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

上述就是小編為大家分享的MY_Controller如何在CodeIgniter中使用了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI