2016-07-20 72 views
0

我已經使用View Composer創建了一些代碼,我將Route Collection傳遞到所有視圖的前端,這樣我就可以通過與它們相關聯的路線訪問Vuejs中的所有laravel路線。用於Laravel路徑的JavaScript全局變量 - 這是個好主意嗎?

例如,使用VUE組件,而不是通過我上傳的路線到Vue的組件上傳的圖像,它被列爲一個全局變量的一部分:

var uploadRoute  = _.find(globalRoutes, function(route) { return route.name == 'route-name.image.upload' }); 
$.post(uploadRoute, data) ... etc 

我的問題是.. 。這是明智的嗎?我公開發布我的整個應用程序的路線。

謝謝

回答

2

我認爲你的直覺暴露你的整個應用程序的路線是合法的。海事組織你應該明確挑選出你需要的路線。所以在這種情況下,你應該只暴露route-name.image.upload。您可以創建一個小幫助函數來查找路由並將它們與URL一起輸出爲JSON。

function json_routes(array $routes) 
{ 
    $return = []; 

    foreach($routes as $route) 
    { 
     $return[$route] = route($route); 
    } 

    return new \Illuminate\Support\HtmlString(json_encode($return)); 

} 

而且,在你的主要觀點:

var routes = {{ json_routes(["route-name.image.upload"]) }}; 

獲取路線很簡單:

routes['route-name.image.upload']; 

這是最基本的exaple我能想到的。你可以優化它很多。只是一些想法:

  • 將路線放在一箇中心的地方,FX。一個配置元素:json_routes(config('app.json_routes'))
  • 構建一個命令,該命令生成一個靜態.json文件,以便在每次頁面加載時不會遍歷路徑。請記住在添加更多路線時重新生成。
  • 創建一個函數而不是一個對象來獲取路線。這允許你建立在邏輯和給出你的JS更Laravel般的感覺:function route(path){ return window.routes.hasOwnProperty(path) ? window.routes[path] : null ;}

  • (高級)重新寫Laravels路由器邏輯和勾入選項陣列,使你像做Route::get('dashboard', '...', ['as'=>'dashboard', 'expose'=>true]); ,然後動態生成前面提到的帶有expose選項的所有路由的json文件。

+0

不客氣,埃德:) – Dencker

+0

我喜歡高級建議 - 我可以試試。 –

+0

@Ed這也可以繞過手動更新路由陣列的方法,如果您更改路由名稱。 – Dencker

相關問題