2015-11-25 3 views
0

Laravel имеет этот довольно синтаксис:Маршрут цепочки в Ларавеле?

Route::{$method}('/user/{id}', "[email protected]")->name("user") 

Но, Что волшебство за ним?

Маршрут - это фасад для Illuminate\Routing\Router, который сам имеет методы для GET POST PUT DELTE и так далее. Но каждый метод возвращает $this->addRoute(), который сам по себе возвращает \Illuminate\Routing\RouteCollection::add(), и это, наконец, возвращает переменную с именем $route, которая содержит Route. Есть несколько шагов (создание экземпляра Route уже выполняется в Router способом, который также добавляет маршрут к коллекции маршрутов).

Но, наконец, возвращается объект класса Illuminate\Routing\Route. Как это имеет дело с такими вещами, как цепочка name()? Записывает ли это имя в отдельный объект, который находится в $collection из Router?

Заранее благодарим за ваши самые полезные ответы!

ответ

5

Интересно, что это не всегда было возможно. В Laravel 4 вы не можете назвать маршрут от самого объекта Route (хотя вы могли бы делать другие вещи, которые были более непосредственно связаны с маршрутом), но в 5 теперь вы можете это сделать.

Так что быстрая грунтовка для цепочки: путем возврата $this в метод, вы допускаете такой метод цепочки $route->name('whatever')->where('id', '\d+'). Это, я полагаю, вы уже знаете.

Таким образом, дополнительный слой фасада ничего особенного - фасад get/post/etc. метод просто возвращает экземпляр Route (в конце концов, как вы говорите!), который затем созрел для цепочки.

Так вот, где он получает удовольствие. В Laravel 4 наименование Route было доступно только на RouteCollection, а не на самом Route - это потому, что RouteCollection управлял именами Route s. В настоящее время это уже не так. Каждый Route сохраняет свое имя.

Если вы проверить RouteCollection класс, вы увидите, что есть метод refreshNameLoopups [2], который используется в качестве части механизма согласования маршрута, чтобы получить имя каждого маршрута и кэш локально для быстрого поиска.

Так вот как Route может «сказать» его родитель RouteCollection, что он должен вызвать его :)

+0

@Kyslik спасибо за редактирование - Я всегда забываю о API Docs :) – alexrussell

+0

Нет проблем ремесленничества; Я всегда смотрю в API первым, обрабатывал ответ, когда тебя толкнули :) – Kyslik