自定义MVC框架-入口文件

栏目: 后端 · 发布时间: 6年前

内容简介:当前项目 中存在很多的模型文件和控制器文件,还有一些视图文件那么如何访问这些类以及文件呢?当前的方法时,通过浏览器访问index.php,然后在此文件中 ,创建需要的控制器类的对象,再调用此类的方法

1. 抛出问题

当前项目 中存在很多的模型文件和控制器文件,还有一些视图文件

那么如何访问这些类以及文件呢?

当前的方法时,通过浏览器访问index.php,然后在此文件中 ,创建需要的控制器类的对象,再调用此类的方法

require_once './controller/UsersController.class.php';
$c=new UsersController();
$c->select();

那么如果要访问NewsController中的select方法怎么办呢?

修改index.php

require_once './controller/NewsController.class.php';
$c=new NewsController();
$c->select();

访问NewsController中的 add 方法呢?

还要无限制的修改下去吗?

当然不是!

2. 解决问题

我们将主动权交给用户,用户告诉index.php想要访问哪个控制器和哪个方法,index.php就实例化对应的类,并调用对应的方法,而不是像上面那样将控制器名称与方法名称写死

修改index.php 代码如下

//获取用户请求的控制器名称(不带Controller后缀)
$c=$_GET['c'];
//获取用户请求的方法名称(不带Action后缀)
$a=$_GET['a'];
//为类名添加Controller后缀
$className=$c."Controller";
//为方法名称添加Action后缀
$actionName=$a."Action";
echo $className;
echo '<br>';
echo $actionName;

然后在浏览器中输入如下地址,在index.php后面传递参数

自定义MVC框架-入口文件

总结

1)为了输入方便,请求控制器和方法时无需输入后缀,index.php获取后再拼接完整类名和方法名称

2)输入的控制器名称和方法名称都是小写,实际的类型和方法名称是既有大写,也有小写,但是 PHP 对于类名和方法名称是不区分大小写的,所以这么些也可以

下面继续修改index.php 代码,做到自动实例化控制器类,并调用请求的方法名称

在上面代码的基础上追加如下代码

//引入控制器所在的文件
require_once './controller/'.$className.'.class.php';
//创建对象
$controller_name=new $className();
$controller_name->$actionName();

浏览器中输入如下地址访问

自定义MVC框架-入口文件

如果像访问其他控制器和方法,只需要更换上面参数 c 和 a 的值即可

总结:

通过浏览器访问index.php,php再根据用户的请求调用对应的控制器和方法。这个index.php 就是我们这个程序的访问入口,此文件就叫做入口文件

3. 遗留问题

如果用户在地址栏输入如下地址,则会报错

自定义MVC框架-入口文件

原因在于没有传递参数c和参数a

index.php 在执行如下代码时获取的就是 NULL,导致index.php 不知道要获取哪个控制器

解决方案就是,如果用户没有传递参数c或者a,就为其设置一个默认值

如下代码

//获取用户请求的控制器名称(不带Controller后缀)
$c=isset($_GET['c'])?$_GET['c']:'users';
//获取用户请求的方法名称(不带Action后缀)
$a=isset($_GET['a'])?$_GET['a']:'select';

这样,再输入如下地址访问时

自定义MVC框架-入口文件

此种方法正好解决了我们设置网站默认访问页面的问题


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java in a Nutshell, 6th Edition

Java in a Nutshell, 6th Edition

Benjamin J Evans、David Flanagan / O'Reilly Media / 2014-10 / USD 59.99

The latest edition of Java in a Nutshell is designed to help experienced Java programmers get the most out of Java 7 and 8, but it's also a learning path for new developers. Chock full of examples tha......一起来看看 《Java in a Nutshell, 6th Edition》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具