## 控制器
我們找到`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
~~~

因為默認的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`操作方法后的結果都會顯示類似的異常信息:

異常頁面包含了詳細的錯誤信息,是因為開啟了調試模式,如果關閉調試模式的話,看到的默認信息如下:

- 零、序言
- 一、基礎
- (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你必須努力避免的一些問題