https://blog.csdn.net/self_realian/article/details/75065923
入口文件
我们都知道thinkphp是一个单入口框架,它所有的请求都通过public/index.php进入,之后通过携带不同的参数,转发到相应的控制器中来实现不同的功能。
单入口文件:应用程序的所有http请求都由某一个文件接受并由这个文件转发到功能代码中
单入口优势:
安全监测(如果是多入口我们就需要在每个入口文件中做相应的安全监测)
请求过滤(在我们的入口文件中,我们可以过滤掉某些无效的请求,如果是多入口就需要重复这个功能)
现在我们看一下入口文件:
我们打开thinkphp/base.php,里边都是定义的常量
![](https://i-blog.csdnimg.cn/blog_migrate/1a2c3a4fa95c7215e4ff2136c61197fd.png)
public/index.php中的那个 __DIR__常量在thinkphp/base.php可看见是指框架的根目录,即thinkphp
![](https://i-blog.csdnimg.cn/blog_migrate/ff02adc884b40a9a5dda168bf631779c.png)
在这里我们可以改变一些系统默认的配置,也就是一些常量的配置
入口文件绑定
当我们在当前目录下有一个index.php,如果我们正常情况下,我们默认访问的是index模块下的Index控制器下的index方法,如果我们现在想访问index.php或者是我们在这个地方再新建一个其它的文件,我们能不能将这个文件,直接绑定到某个模块,而把我们URL上的模块名简化更方便我们输入呢?其实thinkphp为我们准备了入口文件绑定的方法
当我们输入localhost/ThinkPHP5.0/public时,默认访问的是index模块下的Index控制器下的index方法
而当我们在入口文件(public/index.php)中添加如下代码(也就是定义一个常量)
![](https://i-blog.csdnimg.cn/blog_migrate/a68f309e9292401a657a022af0d1c6e0.png)
这个时候默认访问的就是admin模块下的Index控制器下的index方法
现在,如果我们想为我们的网站提供一个接口,比如说我这个网站想开发一些数据给第三方,我可能需要给第三方提供一些接口,所以这个时候我就不需要它再访问我的index.php文件,我可能让它直接进入我们的api.php(public/api.php)
![](https://i-blog.csdnimg.cn/blog_migrate/329a7c004b97bf7368bb8793db0098c3.png)
如果我的网站开发给第三方,那么我肯定不期望第三方访问我的index模块和admin模块,这样我们只需要在api.php中绑定api模块,这样我们访问api.php直接访问api模块,别的模块访问不了
关与这种情况,thinkphp还给我们提供了另外一种方式。在thinkphp/convention.php中有一个
![](https://i-blog.csdnimg.cn/blog_migrate/6b8ffdea3cbd6e29e8f34fbb301c3d3a.png)
我们将它拷贝到应用配置文件中,它默认是false,我们现在给它修改成true
修改之后要想生效,我们需要创建一个与api.php文件名相同的模块
这个时候我们再创建一个api模块
![](https://i-blog.csdnimg.cn/blog_migrate/cd94147f8da4e9c21311b9d94e5f2ec6.png)
这个时候我们再访问api.php,就会发现访问的是api/Index/index
![](https://i-blog.csdnimg.cn/blog_migrate/f41c9c7b09a14f3e0d8e08bd99bcfd9d.png)
分析一下流程:如果我们开启了入口文件自动绑定这个操作(即’auto_bind_module’=> true),在我们的目录下有这个php文件,那么它会访问和这个php文件名相同模块,比如说我们有api,那么我们访问的就是api这个模块,所以我们默认的不需要传递第一个模块名,也就是说不需要传递第一个参数,它能够直接访问
比如我们想访问api/Index/demo方法,我们在浏览器中直接访问localhost/Thinkphp5.0/index.php/Index/demo即可,不用加上api了
路由
它是为了美化URL,简化用户的访问
下面我们直接写代码来看路由是如何使用的
我们首先在index/Index控制器下新加一个一个info()方法(给该函数传递一个参数)
![](https://i-blog.csdnimg.cn/blog_migrate/db53220aa3a7dd43170078cdd06fc35a.png)
那么我们访问这个info方法的时候应该这样写
localhost/ThinkPHP5.0/public/index.php/index/Index/info/id/5
![](https://i-blog.csdnimg.cn/blog_migrate/f7b91811e01530069663bbd1598cd2b5.png)
如果我们想将当期的访问简化,变成这样localhost/ThinkPHP5.0/public/news/5.html
这里我们就需要引入路由的概念。如果我们想起用路由,就需要进行配置
首先打开thinkphp/convention.php找到url_route_on和url_route_must,将其拷贝到我们的应用配置config.php
![](https://i-blog.csdnimg.cn/blog_migrate/561566fe61c2f5c65b2a14180f3f5484.png)
然后我们在conf文件夹下创建一个route.php文件,也就是路由配置,在里边写一下访问的规则
![](https://i-blog.csdnimg.cn/blog_migrate/828c4e82587dc7e03a731c9c007cc910.png)
这个时候我们再去浏览器中访问
如果我还用刚才的方法进行访问
![](https://i-blog.csdnimg.cn/blog_migrate/5562f11284b1232271b9ef362fb267e1.png)
按照配置那样访问
![](https://i-blog.csdnimg.cn/blog_migrate/25f58b490757664446578898b7ddc0e1.png)
这样就对了。
使用路由还有一个好处,看下面的截图
![](https://i-blog.csdnimg.cn/blog_migrate/77786dcf6905323212b320a74ca855e7.png)
如果我们将这里的index方法改成info,也就是说我们想直接使用url()这个助手函数,输出我们当前控制器的路由,我们会看到
![](https://i-blog.csdnimg.cn/blog_migrate/0a3f831e1d2d32cd764f0d539da1cdd4.png)
也就是说,它会根据我们的路由规则生成相应的url
然后我们再看一下’url_route_must’
如果现在我们要访问index/Index/demo(),我们可以使用这样的方式
![](https://i-blog.csdnimg.cn/blog_migrate/eb77cdb79fa975a3a0b77380a5904d1c.png)
如果这个时候我们将’url_route_must’改成true,此时再刷新那个页面,就会报错了
![](https://i-blog.csdnimg.cn/blog_migrate/54e958ce5b20d936a7ba3b2a9183ba2f.png)
因为改了’url_route_must’为true之后意思就是说,我们所有的url必须通过路由的方式来访问。如果我们想要我们刚才的那个Index/demo()生效的话,就在route.php中添加一下配置就好了
![](https://i-blog.csdnimg.cn/blog_migrate/1fd80f350a8f27a83f206047dc20c3ec.png)
如果将’url_route_must’为true,那么thinkphp的默认路由访问规则就会失效,所以我们一般将它设置为false
这样我们就可以不配置路由,通过默认的方式进行访问
其实这里的news我们也可以改,比如说改成posts
![](https://i-blog.csdnimg.cn/blog_migrate/6b882d5ebd4d33abba617f9e14520e4c.png)