我想在这里分享我的应用程序结构。
我从模型开始。我为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