這里可以直接從第四條開始看
原文 http://www.upwqy.com/details/12.html
1 文檔鏈接
tp5路由官方文檔 https://www.kancloud.cn/manual/thinkphp5/118041
2 為什么要使用路由
對於咱們的pc站來說,如果是在不是用路由的情況下,路徑是很長的,看起來就很不友好,
當然啦,具體為什么要使用路由呢,
我考慮的是 第一個可讀性和友好性上比較好,第二是我們隱藏了自己項目的實際路徑,這會對安全性帶來幫助。
這只是我個人的看法。
3 熟悉官方文檔
我們要熟悉官方文檔 使用的依據肯定是依照文檔上來的,我們不可以閉門造車。既然使用tp5就要根據tp5設置的規則來。
4 開啟路由配置
// 是否開啟路由 'url_route_on' => true, // 路由使用完整匹配 'route_complete_match' => true, // 是否強制使用路由 'url_route_must' => true,
5 定義路由 並測試獲取路由參數和?后的參數
看一下文檔中的路由參數 提供了很多方法開快捷定義路由的,
我們這里使用
Route::get() 和Route::post()兩種方式來配置路由
在路由文件中聲明使用路由
use think\Route;
定義第一個路由 比如
Route::get('hello','index/test/hello');
第一個參數是我們實際需要在鏈接中要訪問的地址 ,第二個參數是實際應用要走的module/controller/action
我們可以在
index/test/hello
對應的hello 方法中 echo ''你好';
訪問 域名/hello
可以看到在瀏覽器上輸出
你好
接下來我們修改一下路由
Route::get('hello/:id','index/test/hello');
在hello 方法中
dump(input('get.id')); dump(input()); dump(request()->get()); dump(request()->get('id')); dump(request()->param()); dump(request()->param('id')); dump(request()->route()); dump(request()->route('id'));
返回結果是依次是
null array (size=1) 'id' => string '10' (length=2) array (size=0) empty null array (size=1) 'id' => string '10' (length=2) string '10' (length=2) array (size=1) 'id' => string '10' (length=2) string '10' (length=2)
其中
dump(input('get.id')); dump(request()->get()); dump(request()->get('id'));
這三種獲取參數的方式 ,在定義了路由,並且路由中定義了:id 這種變量時 是獲取不到參數的
另外下面這種方式可以獲取到參數
public function hello($id)
這里輸出$id也可以獲取到值。但是這里的 $id 必須要和 路由中的 :id 對應 變量必須相同
另外如果 在鏈接后面跟上參數
比如 域名/hello/10?name=123
使用上面的獲取參數的方法 來獲取name值 是都可以獲取到值的,所以這里我們就需要需要合適的獲取參數方法了
我們測試一下
dump(input()); dump(request()->get()); dump(request()->route()); dump(request()->param());
array (size=2) 'name' => string '123' (length=3) 'id' => string '10' (length=2) array (size=1) 'name' => string '123' (length=3) array (size=1) 'id' => string '10' (length=2) array (size=2) 'name' => string '123' (length=3) 'id' => string '10' (length=2)
如果我們只想要自己定義的路由變量 就需要使用
request()->route()
獲取參數
還有我們看到其中的
request()->get()
獲取的參數只獲得了我們 ? 后面的參數 ,並且在上面的沒有添加name時是沒有獲取到參數的
所以路由里面的:id這種變量 我們不能使用
request()->get()
來獲得參數
還有強調一下 我們最好不要用能獲取?后面參數的方法來獲取參數。如果實在是需要獲取。我們最好能夠准備的指定我們需要獲取的參數變量
6 網頁上使用路由鏈接
我們能夠定義路由,並實際的訪問了 我們看一下 在網頁上怎么運用
你可能會說,既然我們定義了路由。那么直接上鏈接上拼接上鏈接不就可以了
我想說 這樣是萬萬不好的
比如說我的上面的鏈接 /hello/:id 在鏈接上直接輸入
這樣的。當前這可以訪問。但是這樣的鏈接在運營的過程中使用的越來越多 如果哪天看着這個鏈接不順眼了。或者說,老板找你,把這個鏈接改一下。難道你要一個一個的去找去改嗎,這樣的很麻煩。
既然說到這里了。必然會有解決辦法的
我們可以看官方文檔。url生成
我們在網頁鏈接上直接按照原來沒有定義路由時的思路來 寫鏈接
tp5 生成鏈接的方式是使用url
{:url('index/test/hello?id='.$v['id'])}//這個是循環數據時拼接變量
//這里直接使用a標簽會被解析 所以用漢字代替了 a標簽 href="{:url('index/article/details?id=1')}"> 我是一個鏈接 /a標簽
打開網頁 我們把鼠標放到標題上 可以看到瀏覽器下方的狀態欄上 實際的鏈接就是我們需要的。域名/hello/1.html
這里在網頁上直接生成的鏈接會帶有后綴html 沒有這個html也是可以訪問的。
現在我的鏈接是不是我們想要的理想效果了
我們這里改一下路由
Route::get('news/:id','index/test/hello');
刷新頁面 是不是鏈接已經更新了 域名/news/1.html
ok 測試暫時告一段落 這樣基本夠平時的使用的。以后有發現會及時更新的