MVC模式讲解(1)

控制器的典型实现

控制器的作用

  • 获取请求数据
  • 根据请求信息,以决定,调用哪个模型以获取什么数据;
  • 根据请求信息,载入哪个视图文件以显示该(些)数据

 

 

数组函数in_array()的用法:

 

控制器类的常规做法

先观察目前写完的2个控制器:

 

 

自然,还可以按此模式,写更多的控制器。

但基本模式都一样:

其功能:

1,用于获取用户的请求数据,

2,(或)获取模型数据,

3,显示到视图中——或也可能直接输出;

 

控制器的划分

通常,一个项目中,会有很多很多的功能,我们通常会将一些“相关功能”,合在一起,称为“一个模块”,并使用一个控制器去“表达”这个模块中的各个功能——其实就是方法。

图示如下:

控制器中的“动作”:

一个控制器,就是一个类;

一个控制器中,就只包含了一些方法!!!

那么, 这些方法,被称为“动作”——因为每个方法,一定就对应了网页界面上用户所在的某个“操作”(动作,请求);

习惯上,所有的动作(方法),都以“Action”这个词为结尾。

这些动作(方法名),将会对应网页上的连接(或跳转或提交)动作中的“act”参数的值!

类似这样:

对应(userController中):

又来:

对应(userController中):

 

实际应用中,在网页的连接(或跳转或提交)的时候,act=XXX会写成:

a=XXX

如下:

则在控制器中获取数据时:

 

基础控制器类

一个项目中,有多个控制器!

每个控制器是一个类文件!

每个控制器中都有各自的一些功能——方法——动作!

但:

他们常常,有一些共同的工作或事情要去做:

1,设定编码!

因为是由控制器来决定显示什么数据,也就应该由其来决定使用什么编码!

一般来说,每一个网站(项目/软件)产品,通常都是使用一种相对固定的编码。

则他们应该可以进行“统一设置”;

 

2,页面的简短消息(提示文字)的显示,以及跳转功能。

这也是常见的通用功能。

使用:

 

 

视图层的典型做法

  • 功能:展示页面的静态内容,以及相关的变量数据。
  • 数据分为:
    • 普通标量数据:echo  $v1;
    • 数组数据:foreach($arr  as  $key => $value){....}
      • 或单独输出:echo  $arr[‘id’];  echo  $arr[‘age’];  .....
    • 对象数据: echo $obj->p1;   echo $obj->p2;

 

有关MVC的其他常见做法

请求分发器(前端控制器):

先观察现有的控制器:

则:

有没有可能,使用一个参数,在每次请求的时候,都带上“要使用的”控制器名

如果可以,则,我们就可以将代码进一步“提升”(简化为):

 

$c = “User”;          //它也可能是“product”,或其他。。。

require  ‘./”  .  $c  . “Model.class.php’;

require './ModelFactory.class.php'; //这个都一样,不同动

require './BaseController.class.php';//这个都一样,不同动

 

class  XXXController  extends  BaseController{ ...... }  //代表某个控制器,每个控制器是一个独立文件

 

require  ‘./’  . $c . “Controller.class.php”;  //这里才是需要载入的“当前控制器类”

$controller_name = $c . “Controller”;          构建控制器的类名

 

$ctrl = new  $controller_name ();       //可变类

$act = !empty($_GET['a']) ? $_GET['a'] : "Index";

$action = $act . "Action";     

$ctrl->$action();

完整代码如下所示:

 

这就是,所谓的前端控制器(请求分发器):

它的作用是:

1,根据传过来的c请求数据,决定使用哪个控制器;——有默认值,目前为User

2,根据传过来的a请求数据,决定使用哪个动作(方法);——有默认值,目前为Index

 

而且,此时,UserController类和ProductController类中,没有其他代码了,只有“纯类”的定义代码

 

 

 

而且,在所有的“连接”(跳转,表单提交)中,都相应的改为:

 

 

 

 

 

 

posted @ 2016-08-04 14:31  z2168465  阅读(194)  评论(0)    收藏  举报