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