谁给我讲讲MVC?或者框架…
不要网上抄的那些…我也知道模块,视图,控制器!
我想要知道他们的运行机制,或者说他们怎么才能“无缝衔接”?…最好弄些个明白的图,呵呵…
谢谢啦!

解决方案 »

  1.   

    还有个问题,怎样才能在同目录中不同文件间共用函数,而不用老是Include?我做了一个集成器,其它文件函数都可以访问这个目录的所有函数,就是这个目录里不能共享函数…很郁闷…拜托拜托!
      

  2.   

    以前自己没事也写过MVC,对这个自己的理解就是它的运行原理就把模板加载到你的模板程序进行正则替换来显示的;
    也就是说你把从数据库查询到的数据和读取模板文件的内容用变量的形式交给控制,然后控制把你传递过来的数据库数据用正则把模板文件中的自定义标签替换掉 然后显示的;
    不知道楼主是否看明白了
      

  3.   

    对照例子自己写个小程序就明白了 Controller.php  
      
     include 'Model.php';  
     include 'View.php';  
     class Controller {  
     private $model     = '';  
     private $view     = '';  
      
     public function Controller(){  
     $this->model    =    new Model();  
     $this->view        =    new View();  
     }  
      
     public function doAction( $method = 'defaultMethod', $params = array() ){  
     if( empty($method) ){  
     $this->defaultMethod();  
     }else if( method_exists($this, $method) ){  
     call_user_func(array($this, $method), $params);  
     }else{  
     $this->nonexisting_method();  
     }  
     }  
      
     public function link_page($name = ''){  
     $links = $this->model->getLinks();  
     $this->view->display($links);  
      
     $result = $this->model->getResult($name);  
     $this->view->display($result);  
     }  
      
     public function defaultMethod(){  
     $this->br();  
     echo "This is the default method. ";  
     }  
      
     public function nonexisting_method(){  
     $this->br();  
     echo "This is the noexisting method. ";  
     }  
      
     public function br(){  
     echo "<br />";  
     }  
     }  
     $controller = new Controller();  
     $controller->doAction('link_page', 'b');  
     $controller->doAction();
     Model.php  
      
     Code  
     class Model {  
     private $database = array(  
     "a"    =>    "hello world",  
     "b"    =>    "ok well done",  
     "c"    =>    "good bye",  
     );  
      
     //@TODO connect the database  
      
     //run the query and get the result  
         public function getResult($name){  
     if( empty($name) ){  
     return FALSE;  
     }  
      
     if( in_array($name, array_keys( $this->database ) ) ){  
     return $this->database[$name];  
     }  
     }  
     public function getLinks(){  
     $links = "<a href='#'>Link A</a>&nbsp;&nbsp;";  
     $links.= "<a href='#'>Link B</a>&nbsp;&nbsp;";  
     $links.= "<a href='#'>Link C</a>&nbsp;&nbsp;";  
      
     return $links;  
     }  
     }  
     View.php  
      
     class View {  
      
     public function display($output){  
     //        ob_start();  
               
     echo $output;  
     }  
     } 
      

  4.   

    找个框架你去熟悉一下就明白了.在主流框架都是封装了mvc结构
    模型(Model):就是封装数据和所有基于对这些数据的操作。
    视图(View):就是封装的是对数据显示,即用户界面。
    控制器(Control):就是封装外界作用于模型的操作和对数据流向的控制等,简单来说就是负责处理和分发客户的请求。
    图示 1:就是一个基本的MVC请求
    图示 1显示了一个在CakePHP中的大概的MVC请求范例。举例说明,假设一个名叫"Ricardo"的客户刚刚点击了一个“现在购买一个客户自定义的Cake!”的链接在你的应用程序页面。
    Ricardo 点击一个链接指向 http://www.example.com/cakes/buy, 并且他的浏览器向你的web server发送了一个请求。
    接着这个分发器检查 URL (/cakes/buy)请求,并且协助这个请求指到正确的控制器。
    这个控制器就会执行特定的应用程序逻辑。例如,他将检查看Ricardo是否已经登陆。
    这个控制器也使用模式去获得应用程序数据层的数据。模式通常展现数据库表,但是他们同时也展现(呈现) LDAP(轻量级目录访问协议)入口 entries, RSS feeds, 或者系统文件。在这个范例中, 这个控制器使用了一个模式(model)从数据库中去抓取、撷取Ricardo的最近的订单。
    一旦控制器已经开始魔法似的处理那些数据,他支配了那些数据成为一个视图。 视图的得到这个数据并且让它为展现给客户准备好。 在CakePHP视图通常是使用HTML格式, 但是一个视图应该能够很容易的成为一个 PDF, XML 文档, 或者 JSON 对象依赖于你的需求。
    一旦视图从控制器中获得数据就会呈现一个完成的编译好的视图给大家,那个视图的内容将会被返回到Ricardo的浏览器。
    差不多每次请求你的应用程序都将遵循这个基本原则。稍后我们将会增加一些关于CakePHP这方面的细节,所以当我们继续下去时请谨记此点。
      

  5.   

    老兄说的我大概明白,有点像编译静态页面....但是,我是想让模块中的函数实现全局共享,因为我在其他地方需要调用这些函数,而我有不想老是做include;
      

  6.   

    4楼:YamateDD老兄!!看了,半懂不懂,但是如果我想让模块中,不同类或者函数相互引用而不用include可以吗?
    比如:
    我想让./M/logs.php调用./M/db.php,但是他们之间不用include(代码内部),可以吗?
    我有做过一个集成引用,只是,在模块外可以被调用,比如View中所有页面都可以....但是就是./M/中的不能相互调用....
      

  7.   

    六楼::daly2008老兄!
    可以具体说说控制器的实现?最好适当代码实现,不过不要太多....呵呵...
    可以讲讲运行的逻辑吗?还有,如何让程序判断调用什么控制器?控制器怎样调用模块?
    谢谢!!!
      

  8.   

    include的问题, 你只要用autoload就行了MVC的问题.....其实..不要想太复杂了...6楼前4行的3个名词的定义已经够清楚了....
    不知道你还有什么疑问...