[英]Laravel 5 Routes - Group Domains from Rows in Database
我有一個需要在多個域上提供服務的Web應用程序。 我為此運行Laravel 5.1。
在routes.php
文件中, 我希望能夠識別用戶找到頁面所經過的域,如果該域在可用域列表中找到,則將其傳遞給特定的控制器 。
以下片段來自我的routes.php
:
$temporaryDomainList = \App\Domain::select('domain')->where('status','=','1')->get()->toArray();
// This returns us a 2-d array, with the second dimension just being ['domain','whatever.com'] -
// we want ['whatever.com','whatever2.com'] so let's clean it up...
$domainList = [];
foreach ($temporaryDomainList as $uselessArray) {
$domainList[] = $uselessArray['domain'];
}
Route::group(['domain' => $domainList], function ($domainList) {
Route::get('/{linkName}', 'RetargetController@retarget');
Route::get('/', function () {
throw new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
});
});
這里的問題是,您試圖將一組域分配給組的domain
屬性。 您不能這樣做, domain
屬性應該是一個字符串 ,而不是字符串數組。 當RouteCollection
類嘗試將其與另一個字符串連接時 ,您將獲得:
數組到字符串的轉換異常
要解決此問題,您應該在foreach
內部創建組:
$domains = \App\Domain::where('status', '1')->get()->pluck('email');
foreach ($domains as $domain) {
Route::group(['domain' => $domain], function () {
Route::get('/{linkName}', 'RetargetController@retarget');
Route::get('/', function () {
abort(404);
});
});
}
我還使用了pluck
來從數據庫中獲取domain
值的集合,因為這是這里所需要的。 同樣,為了簡潔起見,調用abort(404)
幫助器函數與拋出NotFoundHttpException
異常實質上具有相同的作用。
附帶說明一下,您可能希望將路由注冊放在服務提供者中,因為routes.php
文件似乎不是放置數據庫邏輯的好地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.