看过thinkphp基础教程了(以下简称为TP),也按照例子作完了,可是不理解,不明白.....
1:M V C 如何关联到一起的, 针对TP 我知道V是由C中的display方法渲染的,可是不知道M怎么关联起来的!
2:TP官网的教程里,向数据库插入数据的例子,如下..
add.html (html body两个标签省略了没打上)
<FORM method="post" action="__URL__/insert">
标题:<INPUT type="text" name="title"><br/>
内容:<TEXTAREA name="content" rows="5" cols="45"></TEXTAREA><br/>
<INPUT type="submit" value="提交">
</FORM>
问题:既然V(add.html)是C(FormAction.class.php)渲染的, 那么为什么在处理它的表单的时候还要回到FormAction.class.php,而且如何指定的insert()方法去处理表单数据(action="__URL__/insert"刚开始我认为是这里的原因,后来自己建立个文件试验了一下,不好使,不能直接指定某个页面的特定方法去处理)
FormAction.class.php (文件里还有其他方法,add的动作就是这个insert)
public function insert(){
$Form = D('Form');
if($Form->create()) {
$result = $Form->add();
if($result) {
$this->success('操作成功!');
}else{
$this->error('写入错误!');
}
}else{
$this->error($Form->getError());
}
}
问题:如何关联到了M(FormModel.class.php)
FormModel.class.php
class FormModel extends Model {
// 定义自动验证
protected $_validate = array(
array('title','require','标题必须'),
);
// 定义自动完成
protected $_auto = array(
array('create_time','time',1,'function'),
);
}
因为前两个不明白,所以这个压根也没理解是怎么实现的,现不问这个了.
php
MVC
ThinkPHP
------解决方案--------------------
要结合业务逻辑和开发层次来看mvc
Modle:数据模型 你就看成你的数据处理底层 或者即使一个面向对象的api集合(注意他在你的开发中不是正真的底层) 他已经属于你的业务数据模型了
比如你的 业务处理 有人员操作 那么 你一般会有一个 user的数据处理模型 他可以读写你的人员信息
Control:控制器 你的业务逻辑控制api集合 m必须通过control来调用 v是看不见m的 为什么要通过c 因为你的业务操作中有很多逻辑 很多分支 比如添加用户信息是user.add() 但是在添加前 怎么判断访问许可 怎么验证数据呢 添加失败怎么办? 添加成功怎么办? 那就是 c来处理了
view:视图 c吧m获取的数据扔给v 但是v 本身是可以驱动(调用)c的(实际大部分数据的变化都是v触发的,因为v承担了 显示和交互)
在可触界面中 mvc无处不在(或者说都可以用mvc)
关键c放在那个层面 如果c在后台 那么你是 页面级的刷新
如果c的部分在前台 那么 你就可以 局部刷新 (后台只提供数据)
页面级刷新
[client]<--------------------->[server]
(v)<-------------------------->(c)------------>(m)
数据级刷新
[ client ]----------------------------[server]
(v)<---->(c:client)<-------------------------->(c:server)------------>(m)