php – codeigniter – core 的 MY_Controller 繼承問題
看官方文件,原本以為application/core/只能這麼使用
****application/core/MY_Controller.php****
1 2 3 4 5 6 7 8 9 10 11 |
; html-script: false ]class MY_Controller extends CI_Controller { function __construct() { parent::__construct(); } } |
可是很多時候我們需要多做點分離的動作
任何地方:session開啟
前端:過濾XSS攻擊
後端:不過濾POST、GET的XSS或是認證使用者是否登入
這時候通通都實做在MY_Controller 未免太雜亂。
所以實驗了一下其實有另外一種寫法,是codeigniter 上面沒提到的。
============================================================================
****application/core/MY_Controller.php****
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
; html-script: false ]<? /* * 雖然文件名稱為MY_Controller.php,但是實際上裡面所寫的class名稱可以不必對應 MY_Controller * 但我們還是依照規定,把共用的class取名MY_Controller * * class 架構是這樣 * [MY_Controller] 共用 * --[MY_BE_Controller] 後端使用 * --[MY_FE_Controller] 前端使用 * * */ //共同使用的程序 class MY_Controller extends CI_Controller { function __construct() { parent::__construct(); //無論何處都要執行的請寫在這邊,例如開啟session echo "目前使用MY_Controller<br>"; } } class MY_BE_Controller extends MY_Controller { function __construct() { parent::__construct(); //僅供後端使用的程序,例如認證使用者登入狀態 echo "目前使用MY_BE_Controller<br>"; } } class MY_FE_Controller extends MY_Controller { function __construct() { parent::__construct(); //僅供前端使用的程序, 例如過濾POST、GET echo "目前使用MY_FE_Controller<br>"; } } ?> |
接著實驗看看:
(A)
****application/controllers/web.php****
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
; html-script: false ]class Web extends MY_BE_Controller { function __construct() { parent::__construct(); } public function index() { } } /* 會得到: 目前使用MY_Controller 目前使用MY_BE_Controller */ |
(B)
****application/controllers/web.php****
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
; html-script: false ]class Web extends MY_FE_Controller { function __construct() { parent::__construct(); } public function index() { } } /* 會得到: 目前使用MY_Controller 目前使用MY_FE_Controller */ |
這樣一來,前後端各自需要執行的整體程序,就不會通通擠在一起了!