内容简介:当前项目 中存在很多的模型文件和控制器文件,还有一些视图文件那么如何访问这些类以及文件呢?当前的方法时,通过浏览器访问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后面传递参数
总结
1)为了输入方便,请求控制器和方法时无需输入后缀,index.php获取后再拼接完整类名和方法名称
2)输入的控制器名称和方法名称都是小写,实际的类型和方法名称是既有大写,也有小写,但是 PHP 对于类名和方法名称是不区分大小写的,所以这么些也可以
下面继续修改index.php 代码,做到自动实例化控制器类,并调用请求的方法名称
在上面代码的基础上追加如下代码
//引入控制器所在的文件 require_once './controller/'.$className.'.class.php'; //创建对象 $controller_name=new $className(); $controller_name->$actionName();
浏览器中输入如下地址访问
如果像访问其他控制器和方法,只需要更换上面参数 c 和 a 的值即可
总结:
通过浏览器访问index.php,php再根据用户的请求调用对应的控制器和方法。这个index.php 就是我们这个程序的访问入口,此文件就叫做入口文件
3. 遗留问题
如果用户在地址栏输入如下地址,则会报错
原因在于没有传递参数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';
这样,再输入如下地址访问时
此种方法正好解决了我们设置网站默认访问页面的问题
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。