在Laravel 5.4中动态设置路由

时间:2017-06-30 21:37:04

标签: php laravel laravel-5.4

我是Laravel的新手,我以不同的方式修补它,以了解它是如何运作的。

我尝试过的第一件事就是通过创建一个路径配置文件来动态创建路由,该文件本质上是一个视图数组,并循环遍历它们以创建路由。它看起来像这样:



// 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它会回显值,但在返回视图中失败(。

1 个答案:

答案 0 :(得分:2)

我们通常不会在路线中使用循环。实际上,如果我没记错的话,我从来没有在路线上使用过循环。我的建议是使用参数创建一个路径并将其分配给控制器方法。 e.g:

VS2017

然后在你的PageController

// 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('PageController@show')->name('pages.show');

有了这个, http://example.com/my-page 将呈现views / my-page.blade.php视图。如你所见,我也给了他一个名字, pages.show 。您可以使用 route 帮助程序来创建与此帮助程序的链接。 e.g。

public function show($slug) {

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

}

在刀片模板中:

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

请查看文档以获取更多和其他很酷的东西