Laravel有这个漂亮的语法:
Route::{$method}('/user/{id}', "Controller@method")->name("user")
但它背后的魔力是什么?
路由是Illuminate\Routing\Router
的Facade,它本身具有GET POST PUT DELTE
的方法,依此类推。但是每个方法返回$this->addRoute()
,它本身返回\Illuminate\Routing\RouteCollection::add()
,最后返回一个名为$route
的变量,其中包含Route
。中间有一些步骤(通过一个方法在Router
中创建了Route实例,然后将路由添加到路径集合中。)
但最后,返回了类Illuminate\Routing\Route
的对象。
这是如何处理链接name()
之类的事情的?它是否将名称写入位于$collection
的{{1}}的单独对象中?
提前感谢您的最有帮助的答案!
答案 0 :(得分:5)
有趣的是,这并不总是可行的。在Laravel 4中,你无法从Route
对象本身命名一条路线(虽然你可以做其他与路线更直接相关的东西),但现在你可以用5。
关于链接的快速入门:通过在方法中返回$this
,您允许这种方法链接$route->name('whatever')->where('id', '\d+')
。我猜,你已经知道了。
所以外立面的附加层没有什么特别之处 - 外立面get
/ post
/等。方法只返回Route
实例(最终,就像你说的那样!),然后就可以进行链接了。
所以在这里它变得有趣。在Laravel 4中,Route
的命名仅适用于RouteCollection
,而不是Route
本身 - 因为RouteCollection
管理了Route
}} S'名。如今,情况已不再如此。每个Route
都存储自己的名称。
如果你查看了RouteCollection
课程,那么你会看到方法refreshNameLoopups [2],它被用作路线匹配机制的一部分获取每个路由的名称和缓存是本地的,以便快速查找。
这样Route
可以告诉'它的父RouteCollection
它应该叫它:)