## URL访问
`ThinkPHP`采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从`URL`参数中解析当前请求的模块、控制器和操作,下面是一个标准的`URL`访问格式:
~~~
http://domainName/index.php/模块/控制器/操作
~~~
其中`index.php`就称之为应用的入口文件(注意入口文件可以被隐藏,后面会提到)。
>[success]#### 提示:
> * * * * *
> 模块在ThinkPHP中的概念其实就是应用目录下面的子目录,而官方的规范是目录名小写,因此模块全部采用小写命名,无论URL是否开启大小写转换,模块名都会强制小写。
应用的`index`模块的`Index`控制器定义如下:
~~~
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return 'index';
}
public function hello($name = 'World')
{
return 'Hello,' . $name . '!';
}
}
~~~
如果我们直接访问入口文件的话,由于URL中没有模块、控制器和操作,因此系统会访问默认模块(index)下面的默认控制器(Index)的默认操作(index),因此下面的访问是等效的:
~~~
http://tp5.com/index.php
http://tp5.com/index.php/index/index/index
~~~
如果要访问控制器的hello方法,则需要使用完整的URL地址
~~~
http://tp5.com/index.php/index/index/hello/name/thinkphp
~~~
访问URL地址后页面输出结果为:
~~~
Hello,thinkphp!
~~~
由于`name`参数为可选参数,因此也可以使用
~~~
http://tp5.com/index.php/index/index/hello
~~~
访问URL地址后页面输出结果为:
~~~
Hello,World!
~~~
默认情况下,URL地址中的控制器和操作名是不区分大小写的,因此下面的访问其实是等效的:
~~~
http://tp5.com/index.php/index/Index/Index
http://tp5.com/index.php/index/INDEX/INDEX
~~~
如果你的控制器是驼峰的,例如定义一个HelloWorld控制器(`application/index/controller/HelloWorld.php`):
~~~
<?php
namespace app\index\controller;
class HelloWorld
{
public function index($name = 'World')
{
return 'Hello,' . $name . '!';
}
}
~~~
正确的URL访问地址(该地址可以使用url方法生成)应该是:
~~~
http://tp5.com/index.php/index/hello_world/index
~~~
系统会自动定位到`HelloWorld`控制器类去操作。
如果使用
~~~
http://tp5.com/index.php/index/HelloWorld/index
~~~
将会报错,并提示`Helloworld`控制器类不存在。
如果希望严格区分大小写访问(这样就可以支持驼峰法进行控制器访问),可以在应用配置文件中设置:
~~~
// 关闭URL自动转换(支持驼峰访问控制器)
'url_convert' => false,
~~~
关闭URL自动转换之后,必须使用下面的URL地址访问(控制器名称必须严格使用控制器类的名称,不包含控制器后缀):
~~~
http://tp5.com/index.php/index/Index/index
http://tp5.com/index.php/index/HelloWorld/index
~~~
>[success]#### 提示:
> * * * * *
> 操作方法的访问本身不会受URL自动转换的影响,但会影响默认的模板渲染输出。
如果你的服务器环境不支持`pathinfo`方式的URL访问,可以使用兼容方式,例如:
~~~
http://tp5.com/index.php?s=/index/Index/index
~~~
其中变量`s`的名称的可以配置的。
> 5.0不再支持普通的URL访问方式,所以下面的访问是无效的,你会发现无论输入什么,访问的都是默认的控制器和操作^_^
~~~
http://tp5.com/index.php?m=index&c=Index&a=hello
~~~
- 零、序言
- 一、基础
- (1)简介
- (2)安装
- (3)目录结构
- (4)运行环境
- (5)入口文件
- (6)资源访问
- (7)调试模式
- (8)控制器
- (9)视图
- (10)读取数据
- (11)总结
- 二、URL和路由
- (1)URL访问
- (2)参数传入
- (3)隐藏入口
- (4)定义路由
- (5)URL生成
- (6)总结
- 三、请求和响应
- (1)请求对象
- (2)请求信息
- (3)响应对象
- (4)总结
- 四、数据库
- (1)准备
- (2)数据库配置
- (3)原生查询
- (4)查询构造器
- (5)链式操作
- (6)事务支持
- 五、查询语言
- (1)查询表达式
- (2)批量查询
- (3)快捷查询
- (4)视图查询
- (5)闭包查询
- (6)获取值和列
- (7)聚合查询
- (8)时间查询
- (9)字符串查询
- (10)分块查询
- 六、模型和关联
- (1)模型定义
- (2)基础操作
- (3)读取器和修改器
- (4)类型转换和自动完成
- (5)查询范围
- (6)输入和验证
- (7)关联
- (8)模型输出
- 七、视图和模板
- (1)模板输出
- (2)分页输出
- (3)公共模板
- (4)模板定位
- (5)布局模板
- (6)标签定制
- (7)输出替换
- (8)渲染内容
- (9)助手函数
- 八、调试和日志
- (1)第一式:未雨绸缪——页面Trace
- (2)第二式:初见端倪——异常页面
- (3)第三式:拨云见日——断点调试
- (4)第四式:欲穷千里——日志分析
- (5)第五式:运筹帷幄——远程调试
- 九、API开发
- (1)API版本
- (2)异常处理
- (3)RESTFul
- (4)REST调试
- (5)API调试
- (6)安全建议
- 十、命令行工具
- (1)查看指令
- (2)模块生成
- (3)控制器生成
- (4)生成类库映射文件
- (5)生成路由缓存
- (6)生成字段缓存
- (7)指令扩展
- (8)命令行调试
- (9)命令行颜色支持
- (10)命令调用
- 十一、扩展
- (1)函数扩展
- (2)类库扩展
- (3)驱动扩展
- (4)Composer扩展
- 十二、杂项
- Session
- Cookie
- 验证码
- 文件上传
- 图像处理
- 单元测试
- 番外篇:学习ThinkPHP5的正确姿势
- 概念篇:ThinkPHP5名词解释
- 附录A、常见问题集
- 附录B、3.2和5.0区别
- 附录C、助手函数
- 附录D、5.1你必须努力避免的一些问题