Я надеюсь, что кто-то может помочь мне с динамической маршрутизацией для URL, которые могут иметь несколько сегментов. Я занимался поиском по всей сети, но ничто из того, что я нашел, не помогло мне в моей конкретной ситуации.
Немного предыстории... Несколько лет назад я разработал пакет CMS для пользовательских клиентских веб-сайтов, который был построен на CodeIgniter. Этот пакет CMS имеет несколько модулей (Страницы, Блог, Календарь, Запросы и т.д.). Для модуля "Страницы" я кэшировал маршруты в файл конфигурации "пользовательских маршрутов", который связывал полный маршрут для страницы (включая родительский, дедушку и т.д.) С идентификатором страницы. Я сделал это так, чтобы мне не пришлось выполнять поиск в базе данных, чтобы найти страницу для отображения.
В настоящее время я работаю над перестройкой этого пакета CMS с помощью Laravel (5.1) [пока я изучаю Laravel]. Мне нужно выяснить ситуацию с маршрутизацией, прежде чем я смогу перейти к модулю Pages в новой версии пакета.
Я знаю, что могу сделать что-то вроде...
// routes.php
Route::get('{slug}', ['uses' => '[email protected]']);
// PageController.php
class PageController extends Controller
{
public function view($slug)
{
// do a query to get the page by the slug
// display the view
}
}
И это сработало бы, если бы я не разрешал вложенные страницы, но я делаю. И я только навязываю уникальность слизняка на основе родителя. Так что может быть несколько страниц с куском фарго...
- Места/Фарго
- Персонал/Фарго
Как и в случае пакета, который я создал с использованием CodeIgniter, я хотел бы избежать лишних поисков в базе данных, чтобы найти правильную страницу для отображения.
Сначала я хотел создать конфигурационный файл, который будет иметь динамические маршруты, как я делал со старой версией системы. Маршруты будут меняться только в определенное время (при создании страницы, при изменении slug, при изменении родительского элемента), поэтому их "кэширование" будет работать отлично. Но я все еще новичок в Laravel, поэтому я не уверен, каким будет лучший способ сделать это.
Мне удалось выяснить, что следующие маршруты работают. Но это лучший способ настроить это?
Route::get('about/foobar', function(){
return App::make('\App\Http\Controllers\PageController')->callAction('view', [123]);
});
Route::get('foobar', function(){
return App::make('\App\Http\Controllers\PageController')->callAction('view', [345]);
});
По сути, я хотел бы привязать определенный маршрут к определенному идентификатору страницы, когда страница создается (или когда изменяется слаг или родительский элемент).
Я просто слишком усложняю вещи?
Любая помощь или направление в этом отношении будет принята с благодарностью.
Спасибо!