《PHP學(xué)習(xí):CodeIgniter自定義控制器MY_Controller用法分析》要點(diǎn):
本文介紹了PHP學(xué)習(xí):CodeIgniter自定義控制器MY_Controller用法分析,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
PHP實(shí)例本文實(shí)例講述了CodeIgniter自定義控制器MY_Controller用法.分享給大家供大家參考,具體如下:
PHP實(shí)例Codeigniter所有的控制器都必須繼承CI_Controller類,但CI_Controller類位于system目錄下,不太方便修改.為方便做一些公用的處理,通常情況下我們會(huì)在core下創(chuàng)建MY_Controller,用來繼承CI_Controller,從而項(xiàng)目中所有的控制器繼承MY_Controller.
PHP實(shí)例那么,MY_Controller 通常會(huì)做些什么呢?
PHP實(shí)例所有的控制器都繼承了MY_Controller, MY_Controller常常會(huì)加載一些公用幫助函數(shù)、公用類庫,以及實(shí)現(xiàn)一些公用的辦法.
PHP實(shí)例公用的辦法?公有的辦法?
PHP實(shí)例看到這些方法會(huì)意識(shí)到一個(gè)問題,如果方法是public的,那是否可以通過瀏覽器拜訪到.答案是可以的!這樣不該讓用戶拜訪到的方法讓用戶拜訪到了.那設(shè)置protected吧...
PHP實(shí)例備注:CI_Controller中寫public方法不會(huì)被拜訪到,框架限制了CI_Controller中方法通過瀏覽器拜訪.
PHP實(shí)例隨著項(xiàng)目的不斷進(jìn)展,MY_Controller中的公用辦法會(huì)越來越多.如果此時(shí)要增加后臺(tái)管理的功能,所有的控制器依然繼承MY_Controller,那其中的很多辦法可能不適用了.如果后臺(tái)需要的一些公用辦法也寫在這里,這里將會(huì)變得混亂.
PHP實(shí)例如何按模塊區(qū)分不同的控制器?
PHP實(shí)例有兩種處理的方式,第一種是通過不同的公用控制器文件來區(qū)分,由控制器去決定繼承哪一個(gè)公用控制器,當(dāng)然這里得引入公用文件.還有這種方式是可以通過對(duì)象的一個(gè)屬性來維護(hù),不同的模塊賦予該屬性不同的對(duì)象.如:
PHP實(shí)例
<?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 */
PHP實(shí)例控制器調(diào)用MY_Controller構(gòu)造函數(shù)并傳入type值,根據(jù)不同的type值會(huì)加載不同的類庫,然后給類定義一個(gè)統(tǒng)一的別名,方便處理.具體的library可以處理該模塊公用的辦法或load公用的資源,相當(dāng)于該模塊的一個(gè)公用類.當(dāng)然處理方式也可以是直接通過路由中的目錄名或者控制器名稱來控制等等.
PHP實(shí)例這樣避免了加載不同的文件,調(diào)用辦法時(shí)只需要通過$this->helper對(duì)象調(diào)用.在仔細(xì)看看,可以發(fā)現(xiàn)不同模塊的公用類是放在library中,放在library或helper中都可以使用get_intance獲取控制器對(duì)象,但每次使用都需要獲取實(shí)例,相對(duì)麻煩,如果是模型呢?感覺也不太好.其中的公用辦法有一些會(huì)跟業(yè)務(wù)邏輯相關(guān),放在library感覺不太合適.
PHP實(shí)例業(yè)務(wù)邏輯好像并沒有一個(gè)好的地方去實(shí)現(xiàn),控制器的私有辦法?模型?
PHP實(shí)例先總結(jié)下上面的處理辦法:
PHP實(shí)例1、不同模塊之間可以按需加載以及實(shí)現(xiàn)自定義的公用辦法,各個(gè)模塊之間互不影響.如果各模塊之間的公用辦法比較多,也可以再去繼承一個(gè)公用的類.
PHP實(shí)例2、公用辦法放在library中,調(diào)用CI實(shí)例不方便.
PHP實(shí)例3、如果不喜歡$this->herlper的調(diào)用辦法,可以讓控制器去繼承不同的公用控制器,思路是一樣的,只是可能需要手動(dòng)引入文件.
PHP實(shí)例更多關(guān)于CodeIgniter相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《codeigniter入門教程》和《CI(CodeIgniter)框架進(jìn)階教程》
PHP實(shí)例希望本文所述對(duì)大家基于CodeIgniter框架的PHP程序設(shè)計(jì)有所贊助.
歡迎參與《PHP學(xué)習(xí):CodeIgniter自定義控制器MY_Controller用法分析》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/7703.html