Laravel会选择正确或更好的方法

时间:2018-08-15 18:05:11

标签: laravel laravel-5.6

我对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并不是满足我需求的最佳选择。

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

谢谢

2 个答案:

答案 0 :(得分:1)

我没有发现任何明显的安全问题或逻辑上的错误来声明路由。

TL; DR

  

Laravel以某种方式做事是有原因的;以下   标准可能会证明是有用的。

另一方面,编写要避免的几行代码可以带来一些好处:

1。可读性

与第一个示例中的页面一样,很容易看到可用页面的列表,而不是深入研究where调用及其参数。

2。维护和可升级性

对于您来说,目前看来,使用动态页面调用程序似乎是最简单,最快的方法,但是对于您(两年之内)或其他程序员而言,拥有所有路由可能更有意义分解成小块。您尚未实现的内容并不意味着它永远不会实现。如果以后需要在视图中添加一些变量,则跳转到该方法调用中并添加它们会容易得多。

3。使用命名的路线

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

答案 1 :(得分:1)

由于不需要那么多时间或精力,我也建议您保持明确,因为这样可以在将来为您提供更多控制。 再加上当前的实现,您每次想添加新页面时都必须在where子句中添加它,这样无论如何也不会为您节省太多时间。

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

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

一种选择是将简单的视图添加到数组中,并具有以下内容:

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

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

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

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

如果您需要更改uri,刀片文件名或路由名,那么我绝对建议您将其明确化,而不要过度复杂化。