簡體   English   中英

Laravel 5路由-從數據庫中的行分組域

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM