2017-08-17 134 views
-1

我已經設置子域的路由我的應用程序(使用Laravel 5.4)具有以下web.php路線:Laravel子域的路由設置全球第路線()輔助

Route::domain('{company}.myapp.localhost')->group(function() { 
    // Locations 
    Route::resource('/locations' , 'LocationController'); 

    // Services 
    Route::resource('/services' , 'ServiceController'); 
}); 

但是作爲我showedit端點需要被傳遞的ID,在一個ErrorException使用正常route('services.show')助手結果說明Missing required parameters for [Route: services.create] [URI: services/create].

我明白這是必要的,但隨着company被關聯到用戶在登錄(和是在子域)我不要wa nt通過這個每個觀點。我想在全球範圍內設置它。

爲了避免重複查詢,我想到了在會話存儲這是如此(在:

protected function authenticated(Request $request, $user) 
{ 
    $current_company = $user->companies->first(); 
    $company   = [ 
     'id'   => $current_company->id, 
     'name'   => $current_company->name, 
     'display_name' => $current_company->display_name 
    ]; 
    $request->session()->put('company', $company); 
} 

這很好,但我不知道我是否可以通過這個來作爲中間件或東西路線。公司是怎樣在這裏最好的解決方案

+0

爲什麼不能傳遞參數的https://en.wikipedia.org/wiki/Representational_state_transfer –

+0

我知道我需要傳遞的參數,我只是不確定在全球範圍內做到這一點的最佳實施。將它保存到會話中可以在控制器中進行檢索,但由於我需要這個參數,因此應該有更好的方法來完成這個任務,因此它已經被配置,而不必在每個控制器中重新聲明它。 – Sheixt

+0

我對Laravel比較新,所以我不確定最佳實踐...... – Sheixt

回答

0

建議:?資源名稱之前刪除斜線
resource方法將產生如下的URI:

/services/{service} 

所以,你應該定義你的路線是這樣的:

Route::domain('{company}.myapp.localhost')->group(function() { 
    // Locations 
    Route::resource('locations' , 'LocationController'); 

    // Services 
    Route::resource('services' , 'ServiceController', ['only' => ['index', 'store']]); 
    Route::get('services'); 
}); 
+0

這仍然會產生相同的異常錯誤...我仍然需要設置第二個參數(叫做whatever)作爲'route( )'助手......它似乎需要這個來填充域路由中的「{公司}」通配符,這很有道理。 我期待在登錄時設置它(詳見我的問題)並將其傳遞給全局。以避免每個鏈接都要這樣做:'{{route('locations.index',Session :: get('company')['name'])}}' – Sheixt