Laravel меню страниц из базы данных

174
03 декабря 2018, 03:50

Хочу сделать правильно. Задумано, что можно создавать страницы на сайте через панель администратора. Создана таблицы pages в базе данных. Модель Page и контроллер-ресурс PageController. Также настроен роут.

В контроллере PageController для отображения страницы в методе show возвращаю вид и данные для отображения. Тут всё понятно. Запроси страницу - получил.

Когда буду писать админку, то задействую остальные методы контроллера PageController: store, destroy и другие, включая index - для отображения списка всех страниц. Таким образом одна таблица в базе данных - одна модель, один роут-ресурс, один контроллер.

Однако на сайте есть меню, вынесенное как отдельное представление. Возникает вопрос - как динамически генерировать меню. Метод index контроллера PageController занят (для админки; смотри выше). К тому же моё меню - это отдельное представление, ребёнок родителя. Туда данные так просто не передашь - придётся передавать в каждый вид-родитель, а это куча ненужного кода, ведь меню выводится на каждой странице сайта.

Вот собственно и вопрос - как выкрутиться? Как получить данные для отображения этого меню? Так сказать True Laravel Way.

Answer 1

Для этих целей следует использовать View Composers. Можно назначать данные определённым видам и т.п. Очень удобно.

Answer 2

Недавно делал то же самое.

Я делал так:

  1. Каждый элемент меню хранит id родителя. У тех, кто не имеет родителя id родителя равен null.
  2. Выстраиваем в контроллере массив следующим образом: в начало кладем самых старших, потом их детей(не внуков) и так далее.

  3. Дальше за один проход просто вставляем элементы друг в друга. Конструкция массива позволяет. Вставлять можно в domdocumet c php или прямо в страничку c ajax.

Таким образом мы не будем делать много действий на фронт энде и прописывать меню.

А таблицу со страницами через внешний ключ подключим к элементу меню. Т.е. будет 2 контроллера NavigationElementsController и PagesController.

READ ALSO
PHP - Oracle DataBase 12c

PHP - Oracle DataBase 12c

Что я делаю: Верстаю сайт на PHP, хочу в качестве БД использовать Oracle (не спрашивайте почему

176
Как загрузить фотки с фронтенда?

Как загрузить фотки с фронтенда?

Имеются плагины https://octobercmscom/plugin/fireunion-blogfront и https://octobercms

185
Как изменить информацию в базе данных через php

Как изменить информацию в базе данных через php

у меня есть форма для заполнения данных пользователем на которой выводится статья и информация о нейВыглядит она так:

171