Я надеюсь, что кто-то может помочь мне с динамической маршрутизацией для URL-адресов, которые могут иметь несколько сегментов. Я занимаюсь поиском по всему Интернету, но ничто из этого не помогает в моей конкретной ситуации.Динамическая маршрутизация в Laravel 5 Приложение
Немного фона ... Несколько лет назад я разработал пакет CMS для пользовательских клиентских сайтов, который был построен на CodeIgniter. Этот пакет CMS имеет несколько модулей (страницы, блоги, календарь, запросы и т. Д.). Для модуля Pages я кэшировал маршруты в конфигурационный файл «настраиваемые маршруты», который связывал полный маршрут для страницы (включая родителя, дедушку и т. Д.) С идентификатором страницы. Я сделал это, так что мне не нужно было искать базу данных, чтобы найти страницу для отображения.
В настоящее время я работаю над восстановлением этого пакета 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]);
});
В принципе, я хотел бы связать конкретный маршрут к конкретной странице ID при создании страницы (или когда пробковый или один из родителей изменены).
Я просто преувеличиваю вещи?
Любая помощь в этом отношении была бы принята с благодарностью.
Спасибо!
«Я только что преувеличиваю?», ИМО «Да». Кроме того, эти маршруты выглядят как статические, нет динамизма, если вы не допускаете каких-либо заполнителей для 'ID'. Каждый маршрут связан только с одним конкретным «id». –
Как я планирую настроить ситуацию, я не думаю, что есть какой-либо способ использовать динамический маршрут, который не потребует от меня дополнительных запросов к базе данных, чтобы найти нужную страницу. Я буду использовать динамические маршруты для других модулей, таких как блог, но для обычных страниц я не думаю, что это сработает. – Becky