Laravel 中的路由链接?

Route chaining in Laravel?

Laravel 有这个漂亮的语法:

Route::{$method}('/user/{id}', "Controller@method")->name("user")

但这背后的魔力是什么?

Route 是 Illuminate\Routing\Router 的 Facade,它本身具有 GET POST PUT DELTE 的方法等等。但是每个方法 returns $this->addRoute() 本身 returns \Illuminate\Routing\RouteCollection::add() 最后 returns 一个名为 $route 的变量,其中包含 Route.中间有一些步骤(Route 实例的创建已经在 Router 中通过一种方法完成,该方法随后还将路由添加到路由集合中)。

但是最后返回了一个classIlluminate\Routing\Route的对象。 这如何处理链接 name() 之类的事情?它是否将名称写入位于 Router$collection 中的单独对象?

提前感谢您最有帮助的回答!

有趣的是,这并不总是可行的。在 Laravel 4 中,您无法从 Route 对象本身命名路线(尽管您可以做其他与路线更直接相关的事情),但在 5 中,您现在可以。

关于链接的快速入门:通过在方法中返回 $this,您允许这种方法链接 $route->name('whatever')->where('id', '\d+')。那,我想,你已经知道了。

所以额外的外观层没有什么特别的 - 外观的 get/post/等等。方法只是 returns Route 实例(最终,如您所说!),然后就可以进行链接了。

这就是有趣的地方。在 Laravel 4 中,Route 的命名仅适用于 RouteCollection,而不适用于 Route 本身 - 这是因为 RouteCollection 管理 Route 的名字。如今,情况已不再如此。每个 Route 存储自己的名称。

如果你查看 RouteCollection class,你会看到有一个方法 refreshNameLoopups [2] 用作路由匹配机制的一部分来获取每个路由的名称和缓存在本地以便快速查找。

这就是 Route 可以 'tell' 其父 RouteCollection 应该如何称呼它的方式:)