Laravel 选择正确或更好的路线

Laravel routes the right or better way

我是 Laravel 的新手,我想知道基本上使用路线和按照我的方式使用路线有很大的不同:

而不是使用:

Route::get('/','PagesController@index')->name('home');
Route::get('/about','PagesController@about')->name('about');
Route::get('/contact','PagesController@contact')->name('contact');

And methods just return views...

我正在使用:

Route::get('/{page?}','PagesController@index')
->where(['page'=>'about|contact'])->name('page');

public function index($page = 'home') {
    return view($page);
}

对于第二个示例,我可以删除很多代码行,因为 resource controller 不是满足我需求的最佳选择。

那么我为什么不按自己的方式使用路线有什么不好的理由吗?

谢谢

我没有发现任何明显的安全问题或逻辑错误以按照您的方式声明路由。

TL;DR

There are reasons Laravel does its things a certain way; following standards might prove useful down the line.

另一方面,我可以提供一些优点来编写您试图避免的那几行代码:

1.可读性

当可用页面列表像第一个示例一样排列时,很容易看到可用页面的列表,而不是通过 where 调用及其参数进行挖掘。

2。维护和升级能力

对你来说,在这个时间点,这似乎是使用动态页面调用程序最简单和最快的方法,但对于 2 年后的你或其他程序员来说,拥有所有这些可能更有意义路线分解成更小的部分。您尚未实施的内容并不意味着它永远不会实施。如果您稍后需要向视图添加一些变量,跳转到该方法调用并添加它们会容易得多。

3。使用命名路由

在最终需要更改某些 Urls 的情况下,在 blade 模板中使用命名路由可以节省您的时间;一种您不能真正用于动态页面调用程序的技术。

因为它不需要那么多时间或精力,我还建议您明确说明,因为这会让您在未来有更多的控制权。 再加上您当前的实现,您每次要添加新页面时都必须添加到 where 子句,这样无论如何都不会为您节省那么多时间。

简化路由文件的一种方法是使用 view() 而不是 get():

Route::view('about', 'about')->name('about');

中间选择是将您的简单视图添加到数组中,并具有类似的内容:

$basicViews = ['about', 'contact'];

foreach ($basicViews as $basicView) {
    Route::view($basicView, $basicView)->name($basicView);
}

我并不是说你应该采用这种方法,但与使用 PageController 和正则表达式字符串相比有一些好处:

  • 所有涉及的路线都可以清楚地看到,所有内容都包含在您的路线文件中。
  • 路由仍然可以命名。
  • 您不必担心可能有很长的正则表达式字符串

如果您需要更改 uri、blade 文件名或路由名称,那么我绝对建议您明确而不是试图使事情过于复杂。