路老闆個人品牌網站
0
  • 會員登入
  • 關於我們
    回主選單
    • 關於我們
  • 服務項目
  • 我的錄音小間
  • 課程活動
    回主選單
    • 線上課程
    • 預約服務
    • 活動報名
  • 商品總覽
  • 創作與紀錄
    回主選單
    • 部落格
    • 影像紀錄
    • Podcast
    • 我的作品
  • 最新消息
  • 聯絡我們
  • Join us
  • Login
  • 0
    路老闆個人品牌網站
  • 關於我們
    關於我們
  • 服務項目
  • 我的錄音小間
  • 課程活動
    線上課程 預約服務 活動報名
  • 商品總覽
  • 創作與紀錄
    部落格 影像紀錄 Podcast 我的作品
  • 最新消息
  • 聯絡我們
部落格
  • 文章總覽
  • 分類
  • 技術筆記
  • 日本旅遊
  • 網站搬家
  • 時事觀察
  • 投資理財
  • 公司經營
  • 主機架設
  • 接案
  • 遊戲心得
  • 產品開箱
  • 網頁相關
  • 金流串接
  • 遊戲經濟
  • 閒聊
  • 直銷
  • CodeIgniter
  • cpanel
  • 出書材料
  • 個人品牌
  • SEO
  • 讀書心得
  • 金流物流
  • 線上課程心得
  • 日劇
    • 大河劇
      • 真田丸
  • AI
91app ClubHouse php8 imunify360 cdn apache php nginx linode digitalocean
  1. 首頁
  2. 部落格
  3. 如何改寫核心元件 CI_Model - CodeIgniter

如何改寫核心元件 CI_Model - CodeIgniter

2013 Mar 23 未分類

(這篇欠超久)
CodeIgniter 寫久了
就會發現其實模式很固定

Controller 跟 Model 裡面的 function 大概就那些
用 Copy 的容易發生錯誤

於是就想把它變成 default 的 function
只要把 code 填進去
或是用參數來決定就好

例如 Model 是控制資料庫資料存取的
基本上一定會有
create/select/update/delete 幾個動作

如果能把這些 function 先寫好
在把欄位的部份抽出來變成設定
那就可以少掉很多功夫
debug 也會更方便

改寫的方法如下
首先 先在 application/core 內建立一個 MY_Model.php 的檔案

檔案裡面的內容如下
註: 底下程式直接執行會有一些變數未定義的錯誤
因為我已經把一些設定值拔掉
目的只是純粹表達概念

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

class MY_Model extends CI_Model
{
 public function __construct($config=array())
 {
  parent::__construct();
 }

 public function get($idx)
 {
  $this->db->select('*');
  $this->db->where('idx', $idx);

  $res       = $this->db->get($this->table);
  $item       = $res->row_array();

  if(empty($item)) return null;
 }

 public function insert($data)
 {
  $this->db->insert($this->table, $data);
  $idx       = $this->db->insert_id();

  $this->Item_order->update_order_idx($this->table, $idx);
  if($this->image_upload)
   $this->upload_image($idx);

  $this->SEO->update_by_form($this->model_name, $idx);
  $this->Modify_history->insert($this->model_name, $idx, 'insert');
  return $idx;
 }

 public function update($idx, $data)
 {
  $this->db->where('idx', $idx);
  $this->db->update($this->table, $data);
  if($this->image_upload)
   $this->upload_image($idx);

  $this->SEO->update_by_form($this->model_name, $idx);
  $this->Modify_history->insert($this->model_name, $idx, 'update');
  return $idx;
 }

 public function delete($idx)
 {
  $this->db->where('idx', $idx);
  $this->db->delete($this->table);
 }
}

/* End of file MY_Model.php */
/* Location: ./application/core/MY_Model.php */



裡面有一些存取 db 的基本 function
對 db 來說, 可能都會類似像 get 這個 function 一樣
傳入一些固定的值
然後從 db 取值, 或是寫值進去

寫入什麼資料欄位 由外部傳入
重複的部份都放進這個 MY_Model 的 class 裡面

像我有些模組可能需要上傳圖片
寫一些 SEO 資訊
跟記錄這筆資料是誰變更的
這些瑣碎但是固定的事情
都可以移到這層來
以後要修改就不用每個 model 都改
充分發揮物件導向的特性

寫好以後
如果有要繼承這個 base class 的 model
可以這樣寫


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Banner extends MY_Model {

 public function __construct()
 {
  parent::__construct($config);

 }

 public function insert()
 {
  $data       = array();
  $data['title']     = $this->input->post('title');
  $data['link']     = $this->input->post('link');

  $idx       = parent::insert($data);
  return $idx;
 }

 public function update($idx)
 {
  $data       = array();
  $data['title']     = $this->input->post('title');
  $data['link']     = $this->input->post('link');

  $idx       = parent::update($idx, $data);
  return $idx;
 }


}

/* End of file banner.php */
/* Location: ./application/model/customize/banner.php */



注意
繼承的部份已經從 CI_Model 改成 MY_Model 了
其他寫好就都一樣
寫你想寫的步驟跟流程
但是不一樣的是
這層的 code 就更少了

只要把一些要操作的資料準備好
往 MY_Model 丟就好了

甚至像 get 這種拔辣的 function
根本不用寫
直接用 MY_Model 的 function 就好了

以後新增 model 的時候
copy 的 code 變少了
要改的 code 也少很多

這樣 bug 應該可以少很多
製作時間也可以縮短
真是一整個歡樂


結論
其實一個系統好好研究
可以改良的地方真的很多
別小看這些小動作
節省時間 提昇效率 減少錯誤
就可以賺更多錢

  • 分享此文章
0則留言

相關文章

又得用3.5G上網了...

[cPanel] Session 檔案吃掉大量空間

吃拉麵很重要的一件事情: 排隊

不要浪費你我的時間

早餐店總是亂成一團

下町火箭感想 (上)

關於路老闆

推薦連結

  • Alice 你的理財陪跑教練
  • 羅鈞鴻/小虎老師
  • 徐慧玲Lynn
  • 寶寶牙醫 沈醫師
  • 保險資訊懶人包
  • 你的好感度教練
  • 天下為暢

聯絡我們

  • Email: louis@boss-louis.tw
  • 營業時間: 09:00~18:00
  • 聯絡電話: 02-77252950
  • 地址: 106 台北市大安區忠孝東路四段270號17樓
  • 隱私權政策
COPYRIGHT ©路老闆個人品牌網站 All rights reserved | Powered by 路老闆