Laravel 拉威尔的路线是正确的还是更好的

Laravel 拉威尔的路线是正确的还是更好的,laravel,laravel-5.6,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

我是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);
}
对于第二个示例,我可以删除大量代码行,因为
资源控制器
不是满足我需求的最佳选择

那么,我为什么不按自己的方式走呢


谢谢

我没有发现任何明显的安全问题或逻辑错误

TL;DR

拉雷维尔以某种方式做事是有原因的;下列的 标准可能会被证明是有用的

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

1。可读性

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

2。维护和升级能力

对你来说,此时此刻,使用动态页面调用者似乎是最简单、最快的方法,但对你或其他程序员来说,在2年后,将所有路由分解成更小的部分可能更有意义。你还没有实现的并不意味着它永远不会实现。如果以后需要向视图中添加一些变量,那么跳转到该方法调用并添加它们会更容易

3。使用命名路由


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

因为它不需要花费太多时间或精力,我还建议使用显式技术,因为这将在将来为您提供更多的控制。 另外,在当前的实现中,每次要添加新页面时都必须添加where子句,这样就不会为您节省那么多时间

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


中间选择是将简单视图添加到阵列中,并具有如下内容:

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

foreach ($basicViews as $basicView) {
    Route::view($basicView, $basicView)->name($basicView);
}
我不是说您应该使用这种方法,但与使用
PageController
和regex字符串相比,它有一些好处:

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

如果您需要更改uri、刀片文件名或路由名称,那么我绝对建议您使用显式的方式,而不是试图将事情过度复杂化。

也可能是一种选择option@apokryfos是的,但我仍然需要为每条路线添加相同的内容。如果我有10个页面只加载视图。它有10行,或者以我的方式,我只需要将文件命名为route,并将其放入where数组中以获得“page”值。您提供的第一个示例是最干净的方式,并且您不需要使用资源控制器。我建议把你的控制器也分成几页。所以你的路线应该指向AboutController@indexFirst对于您拥有的每个页面,使用控制器更具可读性和意义。您的示例中的问题是,随着时间的推移,它变得越来越复杂,您的网站也在增长。比如,如果你想把数据传递给你的视图,你会怎么做呢?10条路径比一个带有10行代码的正则表达式更容易管理,我想你可能是对的,这很有趣,但我讨厌看到100多个文件和10行代码:我想用我的方式,我可以做我需要的一切,但它凌乱不堪,代码和文件少得多。常规选项和其他人建议的一样,但打开web.php文件,看到50行相同的路径,比如10行基本页面、登录帖子和获取…,这让我很恼火<代码>路由::get('/{user?}/{post?}/{action?}','UsersController@index')->其中(['action'=>'edit | delete'])->名称('user')这是我使用的一个示例,否则我将使用4个路由:user、user/post、user/post/edit,user/post/delete…@Learner我完全明白你的意思,我认为我们大多数人都经历过这样或那样的经历,但当事情变得过于简单出错时,我们会比我们一开始试图避免的问题或在另一条评论中指出的问题更加悲伤,让我们在x时间后再回到它时更难理解。我真诚地建议使用
foreach
选项,而不是
where
选项。@Learner至于你的
user.post.{action}
问题,你可以在
Route::group
中使用
Route::resource()但是,假设您也接受了
$userId
,您可以使用嵌套资源,即
路由::资源('user.post','UserPostController')
我在资源路由方面有问题,它是默认的,如果我不需要获取一个路由,但是我不能(不知道如何更改它)然后我需要创建新方法并添加新行。如果我不使用所有默认方法,我需要指定我使用的方法或我不使用的方法。。。因此,在我的大多数情况下,使用资源是一件痛苦的事情…@Learner如果你不得不改变路线方法,那么资源就不适合你。在我看来,这可能是错误的。可读性是指代码更少,文件更少的东西。2.我可以通过控制视图的方法调用变量。3.我可以使用route('page',['about'])作为示例
$basicViews = ['about', 'contact'];

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