当前位置: 代码迷 >> Web开发 >> MVC的一些有关问题
  详细解决方案

MVC的一些有关问题

热度:194   发布时间:2013-12-26 00:35:35.0
MVC的一些问题
看过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)



  相关解决方案