实际上要自己实现一个mvc的应用也不难,我们知道mvc里面所有内容都必须经过控制器,所以如何把控制权交给控制器呢?
我们需要一个入口文件,入口文件负责将传递的请求交给对应的控制器,实际上也就是完成路由的功能。
为了学习的需要,可以将路由的功能简化,用户通过get方式将控制器的名和action的名传递过来,入口文件接收到所有参数之后,按照之前约定的规则include某一个文件,然后实例化这个类,再调用这个类的相应方法。
01 $action();
13 } else {
14 echo 'the method does not exists';
15 }
16 } else {
17 echo 'the class does not exists';
18 }
19 } else {
20 echo 'controller not exists';
21 }
看着代码行数还是挺多的哦,实际上实现的功能比较简单,就是通过接受通过get方式传递的控制器名和action名,如果没有传递,那么调用默认的控制器名或者action名,当用户传递了控制器名和action名之后可能会存在这样一个问题,就是通过我们之前约定的规则找不到相应的文件或者类或者方法,那么我们需要显示友好的信息,而不是让php抛出一系列的警告,这样对于程序的健壮性很有帮助。
当有了控制器之后,一切都变得简单了,对于模型,我们可以把它看成是一个普通的类,只是在功能上它负责业务逻辑的处理。
1 2 class indexmodel {
3 public function test() {
4 return 'hello world!';
5 }
6 }
作为演示,我们只是在这个模型里面返回一个hello world,那么控制器怎么使用这个模型呢,实际上也就是首先include这个文件,然后实例化类,调用相应的方法。
我们现在修改控制器为:
01 test();
09 } else {
10 echo 'model does not exists';
11 }
12 }
13 }
现在模型有了,那么怎么连接视图呢?
1
2
3
4
5
6
7
写完视图之后,怎么通过控制器调用这个视图呢?
修改控制器至如下:
01 test();
09 $viewpath = dirname(__file__) . '/../views/index.php';
10 if(file_exists($viewpath)) {
11 include $viewpath;
12 } else {
13 echo 'view does not exists';
14 }
15 } else {
16 echo 'model does not exists';
17 }
18 }
19 }
这样一个mvc的应用就搭起来了,虽然比较简陋,问题还多多!!!