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
应该如何称呼它的方式:)
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
应该如何称呼它的方式:)