## 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你必須努力避免的一些問題