## 控制器
我们找到`index`模块的`Index`控制器(文件位于`application/index/controller/Index.php` 注意大小写),我们把`Index`控制器类的`index`方法修改为`Hello,World!`。
~~~
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return 'Hello,World!';
}
}
~~~
>[success]### 提示:
> * * * * *
> 根据类的命名空间可以快速定位文件位置,在`ThinkPHP5.0`的规范里面,命名空间其实对应了文件的所在目录,`app`命名空间通常代表了文件的起始目录为`application`,而`think`命名空间则代表了文件的起始目录为`thinkphp/library/think`,后面的命名空间则表示从起始目录开始的子目录。
我们访问URL地址
~~~
http://tp5.com
~~~
就会看到`Hello,World!`的输出结果。
如果要访问一个驼峰命名的控制器,例如我们把上面的例子改成一个`HelloWorld`控制器。
~~~
<?php
namespace app\index\controller;
class HelloWorld
{
public function index($name = 'World')
{
return 'Hello,' . $name . '!';
}
}
~~~
默认情况下正确的方法是使用下面的URL进行访问
~~~
http://tp5.com/index.php/index/hello_world
~~~
下面的访问地址是错误的
~~~
http://tp5.com/index.php/index/HelloWorld
~~~
![](https://box.kancloud.cn/53358a74210f3ad08afcc0c7d53b03d8_766x485.png)
因为默认的URL访问是不区分大小写的,全部都会转换为小写的控制器名,除非你在应用配置文件中,设置了关闭url自动转换如下:
~~~
'url_convert' => false,
~~~
那么就可以正常访问
~~~
http://tp5.com/index.php/index/HelloWorld
~~~
如果要继承一个公共的控制器类,可以使用:
~~~
<?php
namespace app\index\controller;
use app\index\controller\Base;
class Index extends Base
{
public function index()
{
return 'Hello,World!';
}
}
~~~
可以为操作方法定义参数,例如:
~~~
<?php
namespace app\index\controller;
class Index
{
public function index($name = 'World')
{
return 'Hello,' . $name . '!';
}
}
~~~
当我们带`name`参数访问入口文件地址(例如 `http://tp5.com?name=ThinkPHP`)的时候,在浏览器中可以看到如下输出:
`Hello,ThinkPHP!`
控制器类可以包括多个操作方法,但如果你的操作方法是`protected`或者`private`类型的话,是无法直接通过URL访问到该操作的,也就是说只有`public`类型的操作方法才是可以通过URL访问的。
我们来验证下,把`Index`控制器类的方法修改为:
~~~
<?php
namespace app\index\controller;
class Index
{
public function hello()
{
return 'hello,thinkphp!';
}
public function test()
{
return '这是一个测试方法!';
}
protected function hello2()
{
return '只是protected方法!';
}
private function hello3()
{
return '这是private方法!';
}
}
~~~
当我们访问如下URL地址的时候,前面两个是正常访问,后面两个则会显示异常。
~~~
http://tp5.com/index.php/index/index/hello
http://tp5.com/index.php/index/index/test
http://tp5.com/index.php/index/index/hello2
http://tp5.com/index.php/index/index/hello3
~~~
当我们访问`hello2`和`hello3`操作方法后的结果都会显示类似的异常信息:
![](https://box.kancloud.cn/bbb4dd03b8b6a95ddd4129cd56db00ca_1162x716.png)
异常页面包含了详细的错误信息,是因为开启了调试模式,如果关闭调试模式的话,看到的默认信息如下:
![](https://box.kancloud.cn/ceb999e12c1f654c259699b02f3649b0_852x175.png)
- 零、序言
- 一、基础
- (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你必须努力避免的一些问题