拉拉维尔的路线链接?

时间:2015-11-25 17:18:10

标签: php laravel routing routes laravel-routing

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}}的单独对象中?

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

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它应该叫它:)