实际上,thinkphp5已经为我们做好了过滤。。。所有的http请求都会从入口文件进来。而入口文件的配置,或者说可以在入口文件做哪些配置,在base.php中都能看到:
正常情况下,localhost/index.php这个是入口文件,对应的目录是public/index.php。而这个入口文件通常对应的又是前端的index模块,所以,如果想要访问admin模块,还得先写入口文件index.php,然后才是admin/index/index
若是写成 localhost/admin/index/index则会提示报错
实际上,上面这种情况属于配置没配置好的结果。若想访问admin模块直接就localhost/admin/index/index的话,可以做下面这样的配置:
第一步,先找到apache的httpd.conf文件
第二步,再在这个httpd.conf文件中找到rewrite_modules
将前面的#注释取消掉
接着寻找
第三步:重启apache服务
入口文件绑定:默认情况下,在入口文件处我们访问的都是Index模块的index.php控制器,如果我们想让localhost默认访问的不是index模块,而是admin模块,那么只需要在入口文件处像下图这样进行配置:BIND_MODULE就是绑定模块的意思
由上面这个配置,只需要在url栏输入 :
localhost/admin模块的控制器/admin控制器中的方法
这样的格式,就可以访问admin控制器中的方法了。
同理,也可以直接绑定到某个控制器,比如:
define('BIND_MODULE','admin/index')
这样的写法就可以直接绑定到admin模块的index控制器。因此只需要在url栏输入index控制器中的一个方法即可。比如:localhost/hello
如果,想给第三方开放一个API接口,用来分享网站的数据什么的,但是不想让第三方进入我们的index模块,而是让他进入api.php
如果只做上面这幅图中的内容,那么打开浏览器输入localhost/api.php访问的还是index模块,这是因为还没有进行模块绑定设置,况且,也没有创建api模块
于是,先去config.php中开启自动绑定模块(之所以去config.php中,是因为前几节的学习中,已经在入口文件处将conf文件设置成配置文件了,因此里面的配置文件都会对app中的文件起作用)
开启了自动绑定模块之后,再去创建相应的模块和控制器,下面这个文件路径就是app/api/controller/Index 这个不是浏览器访问路径,访问路径不需要加controller控制器
之后,在浏览器输入localhost/api.php/index/demo就可以访问index控制器中的demo方法。上图没有写出demo方法。
需要注意的是,开启了自动模块绑定,绑定的是模块,因此在浏览器中就不需要输入模块名字了。
为了美化url,或者简化url的访问,需要用到路由。先看一个访问的例子,可以看到注释中访问的url很长,如何简化呢?
先去默认配置中查看,默认是开启的路由
前几节已经将配置文件的路径设置到了conf中,因此原来的配置文件不起作用了?不是的,而是作用被conf文件中的配置覆盖了。
上面这幅图中,一般都会将url_route_must设置成false,因为一旦设置成了true,用户访问的每一个url,开发者都必须提前写好路由规则,否则就会提示访问错误。。。
设置好了之后,再到conf中创建一个route.php路由设置,不过奇怪的是这里将路由的键变成了'news/:id',所以在浏览器器中输入参数的时候,就只能输入news了。值就是这个写法冒号加名字
之后,为了能更好的看到效果,在index.,php中利用url函数进行输出,假如下图中的index/index/info改成index/index/index方法,那么输出的还是/index/index/index/id/10.html,若下图不进行修改,那么输出的则是/news/10.html (原理是因为上面配置了路由规则)
最后补充一句,路由设置的时候,起名字也不是随便起的,最好是能和内容有一定的关联性。比如news/:id这样子,那么news对应的路由最好和新闻啊,消息啊之类的有关系,这属于开发的好习惯吧,有条理。