域名路由


網域路由

可以單獨為網域設定路由規則,例如為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]);


#