【问题标题】:Route chaining in Laravel?Laravel 中的路由链接?
【发布时间】:2015-11-25 17:18:10
【问题描述】:

Laravel 有这样漂亮的语法:

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

但它背后的魔力是什么?

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

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

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

【问题讨论】:

    标签: php laravel routing routes laravel-routing


    【解决方案1】:

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

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

    所以附加的门面层没什么特别的——门面的get/post/等。方法只返回 Route 实例(最终,如你所说!),然后可以进行链接了。

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

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

    这就是Route 可以“告诉”其父级RouteCollection 它应该如何称呼它的方式:)

    【讨论】:

    • @Kyslik 感谢您的编辑 - 我总是忘记 API 文档 :)
    • 工匠没问题;我总是先查看 API,当你被推送时正在制作答案:)
    猜你喜欢
    • 2018-07-25
    • 2021-05-01
    • 2016-04-06
    • 2016-10-30
    • 2019-01-30
    • 2022-11-12
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多