TP5 路由使用


 

這里可以直接從第四條開始看

原文 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 測試暫時告一段落 這樣基本夠平時的使用的。以后有發現會及時更新的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM