hello

Menu

【thinkphp学习笔记02】URL和路由设置

笔记01里已经把文件都放到网站文件夹里了,可是怎么使用呢?

莫着急,这些个文件里有个public文件夹,里面有个index.php就是用来访问的文件啦(入口文件

入口文件大概就是所有访问都要通过访问这个文件然后加参数才能获取到相应的API服务

比如现在访问http://localhost/public/index.php就能看到欢迎页面

上文也说过,tp5通过应用里的controller文件夹里的操作器(其实就是controller里面的php文件)来控制各种东西,现在app里有个index应用,如果要访问app\index\controller里面的文件里的函数该怎么做呢(也叫做使用这些API服务)

实际上前文访问http://localhost/public/index.php时,实际访问的链接是http://localhost/public/index.php/index/Index/index,后面三个index分别对应的是app文件夹下(index应用)里controller下的(Index.php文件里的Index类)中的(index函数)

这里的Index.php和Index类必须同名并且首字母必须大写,我们也可以把这个成为为Index操作器(controller)。

所以,如果有个操作器是app\index\controller\Hello.php,且Hello.php里有个Hello类,并且Hello类有个公有函数为getHello(),那么访问这个函数的url就是http://localhost/public/index.php/index/Hello/getHello


下面说说路由:

这里所说的路由大致可以理解为一个“把url变成自己喜欢的模样”的操作

到目前为止,我们访问函数的方式大致为:

http://localhost/public/index.php/应用名称/控制器[类]/函数/参数名1/参数1/参数名2/参数2...

这个url还是比较难记的,也不利于API调用,不过有路由设置这个操作,能大大提高url的可读性、方便性和安全性

题外话:

如果控制器的名字是用驼峰命名法,那么在url上,得用下划线命名法

例如 app/index/controller/HelloWorld.php里,类名为HelloWorld的类有个index方法,那么要调用到index方法应如下:

http://localhost/index.php/index/hello_world/index

(默认情况下url不区分大小写)

当然如果想让url支持驼峰命名,可以在application/config.php里把 'url_convert' 的值改为false

如果服务器不支持pathinfo,使用兼容模式访问:http://localhost/index.php?s=/index/Index/index

tp5.0以后不再支持普通模式的url调用:http://localhost/index.php?m=index&c=Index&a=index 这样是不能正确访问的


在配置文件中将网站的相对路径设置到public目录下就行了

使用http服务器的rewrite规则,把index.php重写掉即可,例如在nginx中可以添加配置文件内容:

再重新加载以后就会发现不再需要输入/index.php了,当然如果输入也不会访问错误

都在一个应用里,但是还是每次都得输入应用名称岂不是很麻烦,通过定义路由可以把应用名称甚至控制器名称都省略掉

在application/route.php中添加规则为:

这条规则的意思是,把所有以 index/name参数 的url访问全都映射到 index/index/index 里并且传入参数name,所以现在只需要访问:

http://localhost/index/name

当然 index/:name 里的index只是一个名字,也可以自定义为任何其他字符,比如改为 test/:name 则访问:

http://localhost/test/keyword

也可以看到同样的效果,不过此时如果访问

http://localhost/test

会看到404错误,即便你的index函数里有设置默认值也还是会有错误,这是因为在路由里我们把name作为一个必须输入的参数,如果想把它变成可选的,只需要改写为 test/[:name] 就可以访问获得index函数的参数默认值了

假如有个无聊的人,非得访问

http://localhost/test/keyword1/keyword2

这个时候虽然还是显示keyword1,但是总感觉不是很安全,所以可以继续改进,把 test/[:name] 改为 test/[:name]$ ,与正则表达式差不多,它表示必须有0或1个name参数的传入值,然后就结尾,否则的话就是404

路由是非常实用的操作,关于它的详细文档参见 https://www.kancloud.cn/manual/thinkphp5/118029

可以以正则表达式定义传入参数的格式,限制调用方法为get或者post等等


至此就可以将url变为http://localhost/自定义的名称/参数1/参数2.. 只要把路由绑定好就能转化为原始链接

— 热度:135 ℃
— 于 共写了2450个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注