第四步:Think类的实现之URL模式
要实现像thinkphp类似URL访问模式。
比如访问:http://127.0.0.1/index.php/Home/Index/index
通过使用:$_SERVER['PATH_INFO']便能得到:/Home/Index/index
在thinkphp中,Home表示模块,Index表示控制器,index表示操作。
而实际上,控制器是某个类的名字,而操作,其实就是类中的操作。
比如我们访问上面那个网址,那么就可以得到,是Home目录下的IndexController类中的index函数。
所以,我们可以这样做:
$test = new IndexController;
$test->index();
在这里,不需要将IndexControll.class.php这个文件给包含进来,因为autoload这个函数会将我们的IndexController.class.php自动加载进来。
首先,在Library/think中创建一个名为app.class.php的文件:
代码如下:
然后未来测试,我们添加一个控制器文件:
运行:127.0.0.1/tp_an/便可浏览到如下效果:
而如果是:127.0.0.1/tp_an/index.php/Home/Index/test:
好了,现在我们已经基本实现了thinkphp的url模式了,最后再来看下:
比如输入:127.0.0.1/tp_an/index.php/Home/Index/test.
那么,实例化类应该是:
$Controller=newHome\Controller\IndexController;
$Controller->$ACT();
这里,由于IndexContoller.class.php这个文件没有被加载,因此无法实例化该类,所以autoload会被自动调用,然后将该文件给加载进来。
但是在IndexController.class.php中,可以看到我们的类名是IndexController,而不是Home\Controller\IndexController,那么我们该怎么让系统实例化我们的类呢?
其实,我们可以看到IndexController.class.php文件的第一行是;
Namespace Home\Controller;
通过这个,我们不仅可以定位到我们的类文件的位置,而且还能正常地实例化我们的类。