域名路由
網域路由
可以單獨為網域設定路由規則,例如為blog子網域註冊單獨的路由規則:
Route::domain('blog', function () { // 动态注册域名的路由规则 Route::rule('new/:id', 'news/read'); Route::rule(':user', 'user/info'); });
一旦定義了網域路由,該網域的存取就只會讀取網域路由定義的路由規則。
閉包中可以使用路由的其它方法,包括路由分組,但不能再包含域名路由
#支援同時對多個域名設定相同的路由規則:
Route::domain(['blog', 'admin'], function () { // 动态注册域名的路由规则 Route::rule('new/:id', 'news/read'); Route::rule(':user', 'user/info'); });
如果你需要設定一個路由跨所有網域都可以生效,可以對分組路由或某個路由使用crossDomainRule方法設定:
Route::group( function () { // 动态注册域名的路由规则 Route::rule('new/:id', 'news/read'); Route::rule(':user', 'user/info'); })->crossDomainRule();
網域綁定
綁定到控制器類別
// blog子域名绑定控制器 Route::domain('blog', '@blog');
綁定到命名空間
// blog子域名绑定命名空间 Route::domain('blog', ':\app\blog\controller');
綁定到類別
// blog子域名绑定到类 Route::domain('blog', '\app\blog\controller\Article');
泛網域部署
可以支援泛網域部署規則,例如:
// 绑定泛二级域名域名到book应用 Route::domain('*', 'book');
下面的URL存取都會直接存取book應用程式
http://hello.thinkphp.cn http://quickstart.thinkphp.cn
並且可以直接透過Request::panDomain() 取得目前的泛網域值。
支援三級泛網域部署,例如:
// 绑定泛三级域名到user应用 Route::domain('*.user', 'user');
也支援直接把泛網域的值作為額外參數傳入
// 绑定泛三级域名到user应用 Route::domain('*.user', 'user?name=*');
就可以透過Request::param( 'name')取得目前泛網域的值
目前只支援二級網域和三級網域的泛網域部署。
綁定到Response物件
可以直接綁定某個網域到Response對象,例如:
// 绑定域名到Response对象 Route::domain('test', response()->code(404));
如果網域需要同時定義路由規則,並且對其它的情況進行綁定操作,可以在閉包裡面執行綁定操作,例如:
Route::domain('blog', function () { // 动态注册域名的路由规则 Route::rule('new/:id', 'index/news/read'); })->bind('blog');
在blog網域下方定義了一個new/:id的路由規則,指向index應用,而其它的路由則綁定到blog應用程式。
傳入額外參數
可以在網域綁定或路由定義後傳入額外的隱藏參數,例如:
Route::domain('blog', function () { // 动态注册域名的路由规则 Route::rule('new/:id', 'news/read'); Route::rule(':user', 'user/info'); })->append(['app_id'=>1]);
上面的域名路由統一傳入了app_id參數,該參數的值可以透過Request類別的param方法取得。
也可以直接在網域綁定後傳入額外參數
Route::domain('blog', 'blog') ->append(['app_id'=>1]);
路由參數
網域路由本身也是路由分組,所以可以和路由分組一樣定義公共的路由參數,例如:
Route::domain('blog', function () { // 动态注册域名的路由规则 Route::rule('new/:id', 'news/read'); Route::rule(':user', 'user/info'); })->ext('html') ->pattern(['id' => '\d+']) ->append(['group_id' => 1]);