可是为什么路径是在thinkphp/library/think下呢?这就要涉及要另一个概念—根命名空间。
4.1.1 根命名空间
根命名空间是一个关键的概念,以上面的\think\cache\driver\File类为例,think就是一个根命名空间,其对应的初始命名空间目录就是系统的类库目录(thinkphp/library/think),我们可以简单的理解一个根命名空间对应了一个类库包。
系统内置的几个根命名空间(类库包)如下:
4.2 URL访问
在没有定义路由的情况下典型的URL访问规则(PATHINFO模式)是:
http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...]
如果不支持PATHINFO的服务器可以使用兼容模式访问如下:
http://serverName/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值...]
什么是pathinfo模式?
我们都知道一般正常的访问应该是:
http://serverName/index.php?m=module&c=controller&a=action&var1=vaule1&var2=vaule2
而pathinfo模式是这样的:
http://serverName/index.php/module/controller/action/var1/vaule1/var2/value2
在php中有一个全局变量$_SERVER['PATH_INFO'],我们可以通过它来获取index.php后面的内容。
什么是$_SERVER['PATH_INFO']?
官方是这样定义它的:包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息。
什么意思呢?简单来讲就是获得访问的文件和查询?之间的内容。
强调一点,在通过$_SERVER['PATH_INFO']获取值时,系统会把’\'自动转换为’/'(这个特性我在Mac Os(MAMP)、Windows(phpstudy)、Linux(php+apache)环境及php5.x、7.x中进行了测试,都会自动转换,所以系统及版本之间应该不会有所差异)。
下面再分别介绍下入口文件、模块、控制器、操作、参数名/参数值。
1. 入口文件
文件地址:public\index.php
作用:负责处理请求
2. 模块(以前台为例)
模块地址:application\index
作用:网站前台的相关部分
3. 控制器
控制器目录:application\index\controller
作用:书写业务逻辑
4. 操作(方法)
在控制器中定义的方法
5. 参数名/参数值
方法中的参数及参数值
例如我们要访问index模块下的Test.php控制器文件中的hello方法。
那么可以输入<http://serverName/index.php/index(模块)/Test(控制器)/hello(方法)/name(参数名)/world(参数值)
这样就访问到指定文件了。
另外再讲一下Thinkphp的几种传参方式及差别。
PATHINFO: index.php/index/Test/hello/name/world
只能以这种方式传参。
兼容模式:
index.php?s=index/Test/hello/name/world
index.php?s=index/Test/hello&name=world
当我们有两个变量$a、$b时,在兼容模式下还可以将两者结合传参: