http://blog.mvpcn.net/chagel/archive/2004/03/24/536.aspxhttp://blog.mvpcn.net/chagel/archive/2004/04/06/711.aspx
解决方案 »
- PHP+MYSQL的健身俱乐部会员管理系统
- PHP开发是否使用框架
- 如何转换 \u000d\u000a\u000d\u000a 为 HTML 代码?
- require的一个小问题
- 如何让Apache支持<!--#include virtual="../include/top.htm"-->这种语法?
- 这个错误怎么解决啊 主机放弃一个已建立的连接 Warning: socket_read() : unable to read from socket
- 超级奇怪的IF判断语句
- php文件写入问题
- 为什么会执行2次啊
- iis上为什么php对文件和文件夹没有写权限?
- 如何计算中英文字符总数
- 在一个输入框输入信息后如何把javascript语句去掉,但不去掉别的html语句
|-index.php //主入口
|-XXXXX.php //其它功能程序(略)
|-list_product.php //显示产品列表程序
|-config.inc.php 配置文件
|-templates //放模板文件
|-images //放图片文件
|-class //类库
|-admin //后台管理程序
-------------------------------------
class文件夹下 (以一个功能模块为例)
|-mysql.inc.php //数据库抽象类
|-product.inc.php //产品MODEL类
|-view_product.inc.php //产品VIEW类
-------------------------------------
以list_product.php为例,程序实现如下
==========包含相关类库==================
require_once("config.inc.php");
require_once("class/mysql.inc.php");
require_once("class/product.inc.php");
require_once("class/view_product.inc.php");
require_once("class/template.inc.php"); //使用了phplib的模板程序
==========初始化 =======================
$db = & new mysql(); //数据库连接由构造函数完成
$pro = & new product($db);
$v_pro = & new view_product($pro);
$tpl = & new template($TEMPLATE_DIR);
============ 构造列表条件 =================
if (isset($_GET['cat']))
$condition['cat'] = $_GET['cat'];
if (isset($_GET['start']))
$condition['start'] = $_GET['start'];
else
$condition['start'] = 0;
============ 构造列表条件结束 ===============
$pro_list = $v_pro->product_list($condition); //调用方法生成产品列表
$tpl->set_file("product", "product.htm");
$tpl->set_var("pro_list", $pro_list); //解析到模板
$tpl->pparse("out", "product");
-----------------------------------------------------------
总结:
在开发过程中,一开始是将列表及搜索产品程序分两个函数来做,我开始是由用户提交的表单生成sql语句,保存在session中,然后将SQL语句传入函数,这样就没有很好的实现逻辑层的作用,即不在表现层写sql语句,后现经过思考,将所有产品的列表程序(当然包括条件查询)都用一个函数来写,根据传递的数组的键值来组合查询语句,这样在表现层只需将查询变量写入数组并传递给函数就行了,在表现层上看不到SQL了:);不过这样由于查询条件在函数里做判断,也就缺少了灵活性,但只要将所需的全部条件都考虑到,应该还是没什么问题的。
----------下面是product.inc.php中的list_product函数 -------------/* 函数 list_products($condition)
** 功能 从数据库中获取产品列表
** 参数 $condition 条件数组
*/
function list_products($condition)
{
$sql = "SELECT id, name, provider, cat, introduce, price0, price1, price2, price3, price4, price5, unit, score, url, img
FROM product ";
$tmp = "";
if (!empty($condition['id']))
$tmp .= (empty($tmp)?"WHERE":"AND")." id = '".$condition['id']."' ";
if (!empty($condition['cat']))
$tmp .= (empty($tmp)?"WHERE":"AND")." cat = '".$condition['cat']."' ";
if (!empty($condition['name']))
$tmp .= (empty($tmp)?"WHERE":"AND")." name LIKE '%".$condition['name']."%' ";
if (isset($condition['if_pub']))
$tmp .= (empty($tmp)?"WHERE":"AND")." if_pub = '".$condition['if_pub']."' ";
if (!empty($condition['order_by']))
$tmp .= "ORDER BY ".$condition['order_by']." DESC ";
if (isset($condition['start']) && isset($condition['rows']))
$tmp .= "LIMIT ".$condition['start'].", ".$condition['rows'];
$sql .= $tmp;
//echo $sql;
if ($this->db->query($sql))
return 1;
else
return 0;
}
------------------------------------------------------------------不大同意楼主这句话(前半句不同意,我认为Controller是必要的,后半句有点不大清楚)我个人认为Controller在MVC模式中的作用就是接收用户的输入,并对其作出反应。
这在Desktop Application中可以很好实现,而PHP是服务端的语言,有其局限性。
我想他的作用就是对用户在FORM输入的东西,加载相应的Model,并调用Model中的相应
Method对用户的输入进行反应。对应着我们平常一般的PHP的MVC开发中就是,Controller把用户输入的提交给ActionForm的Validate方法,接着再把处理的结果提交给Action进行进一步处理(通常,这时候加载的是业务逻辑层)。Action处理完后,Controller再把结果交给Dispatcher。Controller生命结束。
总的认为,Controller启到了承前启后的作用。
有不对的地方请指教!
大家可以去参考一下