tp5 1 路由 URL生成

2021-09-13 02:45:56 字數 4151 閱讀 8876

thinkphp支援路由url位址的統一生成,並且支援所有的路由方式,以及完美解決了路由位址的反轉解析,無需再為路由定義和變化而改變url生成。

如果你開啟了路由延遲解析,需要生成路由對映快取才能支援全部的路由位址的反轉解析。

url生成使用\think\facade\url::build()方法或者使用系統提供的助手函式url(),引數一致:

url::build('位址表示式',['引數'],['url字尾'],['網域名稱'])

url('位址表示式',['引數'],['url字尾'],['網域名稱'])

route::rule('blog/:id','index/blog/read');
url::build('index/blog/read', 'id=5&name=thinkphp');

url::build('index/blog/read', ['id' => 5, 'name' => 'thinkphp']);

url('index/blog/read', 'id=5&name=thinkphp');

url('index/blog/read', ['id' => 5, 'name' => 'thinkphp']);

如果你的路由方式是路由到模組/控制器/操作,那麼可以直接寫

// 生成index模組 blog控制器的read操作 url訪問位址

url::build('index/blog/read', 'id=5&name=thinkphp');

// 使用助手函式

url('index/blog/read', 'id=5&name=thinkphp');

/index.php/blog/5/name/thinkphp.html
url::build('blog/read','id=5&name=thinkphp');
/blog/5/name/thinkphp.html
如果你配置了:

'url_common_param'=>true
/index.php/blog/5.html?name=thinkphp
不在路由規則裡面的變數會直接使用普通url引數的方式。

需要注意的是,url位址生成不會檢測路由的有效性,只是按照給定的路由位址和引數生成符合條件的路由規則。

// 這裡採用配置方式定義路由 動態註冊的方式一樣有效

route::get('blog/:id', '@index/blog/read');

那麼可以使用如下方式生成:

// 生成index模組 blog控制器的read操作 url訪問位址

url::build('@index/blog/read', 'id=5');

// 使用助手函式

url('@index/blog/read', 'id=5');

/index.php/blog/5.html
// 這裡採用配置方式定義路由 動態註冊的方式一樣有效
如果路由位址是到類的方法,需要首先給路由定義命名標識,然後使用標識快速生成url位址。

那麼可以使用如下方式生成:

// 生成index模組 blog控制器的read操作 url訪問位址

url::build('blog?id=5');

url('blog?id=5');

/index.php/blog/5.html
我們定義了路由規則如下:

route::get('blog/:id' , 'index/blog/read');
url::build('/blog/5');
/index.php/blog/5.html
預設情況下,系統會自動讀取url_html_suffix配置引數作為url字尾(預設為html),如果我們設定了:

'url_html_suffix'   => 'shtml'
/index.php/blog/5.shtml
如果我們設定了多個url字尾支援

'url_html_suffix'   => 'html|shtml'
/index.php/blog/5.html
如果你希望指定url字尾生成,則可以使用:

url::build('index/blog/read', 'id=5', 'shtml');

url('index/blog/read', 'id=5', 'shtml');

url::build('index/blog/read', 'id=5', 'shtml', true);

url('index/blog/read', 'id=5', 'shtml', true);

第四個引數傳入true的話,表示自動生成網域名稱,如果你開啟了url_domain_deploy還會自動識別匹配當前url規則的網域名稱。

例如,我們註冊了網域名稱路由資訊如下:

route::domain('blog','index/blog');
url::build('index/blog/read','id=5','shtml','blog');

url('index/blog/read','id=5','shtml','blog');

或者傳入完整的網域名稱

url::build('index/blog/read','id=5','shtml','blog.thinkphp.cn');

url('index/blog/read','id=5','shtml','blog.thinkphp.cn');

也可以直接在第乙個引數裡面傳入網域名稱,例如:

url::build('index/blog/read@blog', 'id=5');

url('index/blog/read@blog', 'id=5');

url('index/blog/[email protected]', 'id=5');

url::build('index/blog/read#anchor@blog','id=5');

url('index/blog/read#anchor@blog','id=5');

錨點和網域名稱一起使用的時候,注意錨點在前面,網域名稱在後面。

有時候我們生成的url位址可能需要加上index.php或者去掉index.php,大多數時候系統會自動判斷,如果發現自動生成的位址有問題,可以直接在呼叫build方法之前呼叫root方法,例如加上index.php

url::root('/index.php');

url::build('index/blog/read','id=5');

或者隱藏index.php

url::root('/');

url::build('index/blog/read','id=5');

root方法只需要呼叫一次即可。

tp5 1 框架路由操作 URL生成例項分析

thinkphp支援路由url位址的統一生成,並且支援所有的路由方式,以及完美解決了路由位址的反轉解析,無需再為路由定義和變化而改變url生成。如果你開啟了路由延遲解析,需要生成路由對映快取才能支援全部的路由位址的反轉解析。url程式設計客棧生成使用 think facade url build 方...

tp5 1框架學習之路由

路由 就是使用者訪問提前規定的控制器和方法,進行業務處理 tp預設提供了兩種路由規則 1.pathinfo模式 2.自定義路由規則模式 推薦 tp5.1的路由定義更加物件化,並且預設開啟路由 不能關閉 如果乙個url沒有定義路由,則預設採用pathinfo模式訪問 路由的相關配置解釋 是否強制使用路...

TP5 路由使用

tp5路由官方文件 對於咱們的pc站來說,如果是在不是用路由的情況下,路徑是很長的,看起來就很不友好,當然啦,具體為什麼要使用路由呢,我考慮的是 第乙個可讀性和友好性上比較好,第二是我們隱藏了自己專案的實際路徑,這會對安全性帶來幫助。這只是我個人的看法。我們要熟悉官方文件 使用的依據肯定是依照文件上...