《TP5.0学习笔记---URL和路由篇》

https://blog.csdn.net/self_realian/article/details/75065923

入口文件

我们都知道thinkphp是一个单入口框架,它所有的请求都通过public/index.php进入,之后通过携带不同的参数,转发到相应的控制器中来实现不同的功能。

 

单入口文件:应用程序的所有http请求都由某一个文件接受并由这个文件转发到功能代码中

单入口优势:

       安全监测(如果是多入口我们就需要在每个入口文件中做相应的安全监测)

       请求过滤(在我们的入口文件中,我们可以过滤掉某些无效的请求,如果是多入口就需要重复这个功能)

现在我们看一下入口文件:

我们打开thinkphp/base.php,里边都是定义的常量

public/index.php中的那个  __DIR__常量在thinkphp/base.php可看见是指框架的根目录,即thinkphp

在这里我们可以改变一些系统默认的配置,也就是一些常量的配置

入口文件绑定

当我们在当前目录下有一个index.php,如果我们正常情况下,我们默认访问的是index模块下的Index控制器下的index方法,如果我们现在想访问index.php或者是我们在这个地方再新建一个其它的文件,我们能不能将这个文件,直接绑定到某个模块,而把我们URL上的模块名简化更方便我们输入呢?其实thinkphp为我们准备了入口文件绑定的方法

当我们输入localhost/ThinkPHP5.0/public时,默认访问的是index模块下的Index控制器下的index方法

而当我们在入口文件(public/index.php)中添加如下代码(也就是定义一个常量)

这个时候默认访问的就是admin模块下的Index控制器下的index方法


现在,如果我们想为我们的网站提供一个接口,比如说我这个网站想开发一些数据给第三方,我可能需要给第三方提供一些接口,所以这个时候我就不需要它再访问我的index.php文件,我可能让它直接进入我们的api.php(public/api.php)

如果我的网站开发给第三方,那么我肯定不期望第三方访问我的index模块和admin模块,这样我们只需要在api.php中绑定api模块,这样我们访问api.php直接访问api模块,别的模块访问不了

 

关与这种情况,thinkphp还给我们提供了另外一种方式。在thinkphp/convention.php中有一个

我们将它拷贝到应用配置文件中,它默认是false,我们现在给它修改成true

修改之后要想生效,我们需要创建一个与api.php文件名相同的模块

这个时候我们再创建一个api模块

这个时候我们再访问api.php,就会发现访问的是api/Index/index

分析一下流程:如果我们开启了入口文件自动绑定这个操作(即’auto_bind_module’=> true),在我们的目录下有这个php文件,那么它会访问和这个php文件名相同模块,比如说我们有api,那么我们访问的就是api这个模块,所以我们默认的不需要传递第一个模块名,也就是说不需要传递第一个参数,它能够直接访问

比如我们想访问api/Index/demo方法,我们在浏览器中直接访问localhost/Thinkphp5.0/index.php/Index/demo即可,不用加上api了

路由

它是为了美化URL,简化用户的访问

下面我们直接写代码来看路由是如何使用的

我们首先在index/Index控制器下新加一个一个info()方法(给该函数传递一个参数)

那么我们访问这个info方法的时候应该这样写

localhost/ThinkPHP5.0/public/index.php/index/Index/info/id/5

如果我们想将当期的访问简化,变成这样localhost/ThinkPHP5.0/public/news/5.html

这里我们就需要引入路由的概念。如果我们想起用路由,就需要进行配置

首先打开thinkphp/convention.php找到url_route_on和url_route_must,将其拷贝到我们的应用配置config.php

然后我们在conf文件夹下创建一个route.php文件,也就是路由配置,在里边写一下访问的规则

这个时候我们再去浏览器中访问

如果我还用刚才的方法进行访问

按照配置那样访问

这样就对了。

使用路由还有一个好处,看下面的截图

如果我们将这里的index方法改成info,也就是说我们想直接使用url()这个助手函数,输出我们当前控制器的路由,我们会看到

也就是说,它会根据我们的路由规则生成相应的url

然后我们再看一下’url_route_must’

如果现在我们要访问index/Index/demo(),我们可以使用这样的方式

如果这个时候我们将’url_route_must’改成true,此时再刷新那个页面,就会报错了

因为改了’url_route_must’为true之后意思就是说,我们所有的url必须通过路由的方式来访问。如果我们想要我们刚才的那个Index/demo()生效的话,就在route.php中添加一下配置就好了

如果将’url_route_must’为true,那么thinkphp的默认路由访问规则就会失效,所以我们一般将它设置为false

这样我们就可以不配置路由,通过默认的方式进行访问

 

其实这里的news我们也可以改,比如说改成posts

猜你喜欢

转载自blog.csdn.net/rock5275/article/details/80183517
今日推荐