2017-06-30 83 views
-1

我是Laravel的全新品牌,我以不同的方式修改它以瞭解它的工作原理。在Laravel中動態地設置路由5.4

我嘗試過的第一件事情之一是通過創建基本上是視圖數組的路徑配置文件來動態創建路由,並通過它們循環來創建路由。它看起來像這樣:

// Loop through the routes 
 
foreach(config("routes.web") as $route){ 
 

 
    $GLOBALS["tmp_route"] = $route; 
 

 
    // set the path for home 
 
    $path = ($route == "home" ? '/' : $route); 
 

 
    Route::get($path, function() { 
 
     return view($GLOBALS["tmp_route"]); 
 
    }); 
 

 
// foreach 
 
}

我所知道的循環工作正常,但我得到的是'Undefined index: tmp_route'

我很困惑,爲什麼這不起作用?有任何想法嗎?如果我回顯出tmp_route,它會回顯該值,但在返回視圖時失敗(。

+0

你爲什麼做這種方式? Laravel安裝中的「$ GLOBALS」讓我無法控制地抽搐 - 這是一種糟糕的,不好的代碼味道,完全沒有必要。 – ceejayoz

+0

更重要的是我試圖瞭解如何在好奇心的緣故中運行Route :: get循環。我接受建議。我大約2小時前從Laravel開始。 –

+0

我從來沒有見過需要循環來構建路線的問題。不要在配置中有一組路由,只需將這些路由放在路由文件中即可。對於完全動態的任意路由,下面的答案是很好的,但在大多數情況下,你將會擁有'file/1'或'foo/bar'這樣的路由。 – ceejayoz

回答

2

我們通常不在路徑中使用循環,實際上,如果我沒有記錯,我從來沒有在路徑中使用循環。我的建議是創建paramater的路線,並將其分配到一個控制器方法如:

// Note that if you want a route like this, just with one parameter, 
// put it to end of your other routes, otherwise it can catch other 
// single hard-coded routes like Route::get('contact') 
Route::get('{slug}')->uses('[email protected]')->name('pages.show'); 

然後在你的PageController

public function show($slug) { 

    $view = $slug == '/'?'home':$slug; 
    return view($view);   

} 

有了這個,http://example.com/my-page將呈現看法/我的頁面。 blade.php視圖。作爲喲你可以看到我也給了他一個名字,pages.show。您可以使用路線助手與此助手建立鏈接。例如

echo route('pages.show','about-us'); // http://example.com/about-us 
echo route('pages.show','contact'); // http://example.com/contact 

在刀片模板:

<a href="{{ route('pages.show','about-us') }}">About Us</a> 

請看文檔獲取更多和其他有趣的東西