2017-06-30 52 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> 

请看文档获取更多和其他有趣的东西