我想在這裏分享我的應用程序結構。
我從模型開始。我爲mysql數據庫中的一個表編寫1個模型。我已經有MY_Model
我放在system/application/libraries/
文件夾中的課程。本課程有get_detail
,get_list
,get_total
,get_all
,insert
,update
和delete
方法。我存儲在一個變種表名,所以基本上我只需要在模型這個代碼,使其工作:
class Some_table_model extends MY_Model {
function Some_table_model()
{
$this->tablename = 'some_table';
$this->primary_key = 'id';
}
}
更新:經過一些項目,我已經添加了新的變種持有使用的列名爲表中的主鍵。這樣,通過在MY_Model
中對主鍵的列名不進行硬編碼,我將具有更大的靈活性。
對於控制器,我根據用戶的使用情況創建它。一個產品的例子,我會有這個控制器:
function Product extends Controller {
function index()
{
//display product list, paginated
}
function admin()
{
//protected by session
//display product list for admin, paginated
//handle POST request to delete a product or products
}
function form()
{
//protected by session
//handle add/edit product for admin
}
}
查看與控制器有關。對於上述控制器,I將具有至少3視圖的文件:
product_list.php
product_admin.php
product_form.php
視圖可以被放置在子目錄,例如,我可以這樣安排的:
system/application/views/front/product.php
system/application/views/admin/product_list.php
system/application/views/admin/product_form.php
如果產品有類別,我需要另一個表和模型,但對於控制器,我可以把頁面產品控制器內部,通過添加類別到函數名稱:
function category_admin()
{
//get parameter
//...
//process data
//...
//redirect or load view
//...
}
function category_form()
{
//get parameter
//...
//process data
//...
//redirect or load view
//...
}
這就是我做的,這是爲我工作。希望這可以幫助你找到更好的方式來重構你的CodeIgniter的代碼。
這是否假設你的所有主鍵都是'id'? – karlipoppins 2010-09-08 09:50:49
最近我通過添加新的屬性$ primary_key來更新MY_Model。該屬性將保存表的主鍵列名稱,默認值爲'id'。通過這種方式,我可以靈活地處理使用'id'以外的列作爲主鍵的表,例如'country_id'。 – 2010-09-12 12:51:58
大多數這是一個好主意,但我通常避免混合管理員代碼和前端代碼。儘管大部分數據交互會相同或相似,但您必須記住,控制器中的代碼越多,代碼越慢。 PHP不需要爲每個前端用戶解析所有不相關的管理代碼來查看您的網站。 – 2010-09-13 13:09:22