Я знаю, что этот вопрос задавался ранее, но я изо всех сил пытаюсь найти ответ, который соответствует моим потребностям или для самой современной версии Laravel.
По сути, у меня есть множество переменных, которые будут созданы с использованием данных из маршрута и базы данных. Например, мне нужно использовать Route, чтобы установить переменную с именем «current_page», которая извлекает детали из таблицы «pages», используя уникальный столбец url. ($current_page = Page::where('url', <url-taken-from-route>)->first();
)
$ current_page должен содержать несколько отношений. Есть и другие глобальные переменные, такие как $current_site
(это разновидность многосайтовой среды с одной домашней страницей и вложенными микросайтами) и т. Д.
Я считаю, что файлы конфигурации не являются подходящим местом для создания этих переменных: а) значение переменных может быть вложенным и сложным, и б) они не являются константами, а являются данными, полученными из базы данных.
Представления Композиторы, очевидно, работают только с представлениями, а класс Helper кажется слишком общим, учитывая, что мы имеем дело со страницами, сайтами и, возможно, другими глобальными переменными.
Я понимаю, что глобальные переменные осуждаются, но они действительно глобальные. Значения всегда будут одинаковыми (хотя и динамическими) в каждом случае и потребуются большинству представлений и контроллеров.
Я также думал о том, чтобы поместить методы в мои уже существующие контроллеры Page
и Site
, чтобы я мог вызывать Page::current()
, но я не уверен, что размещение статических методов в большинстве нестатических контроллеров является правильным решением. , Кроме того, это будет делать вызов базы данных каждый раз, когда я вызываю Page :: current (), а не хранить текущую страницу где-то в памяти.
На данный момент я создал BaseController, с которого расширяются все остальные контроллеры. Я поместил эти переменные в конструктор и вручную передал их в представление в каждом методе. (Я знаю, что это грязно и не работает для моделей).
Так какое же лучшее решение здесь? Где объявить глобальную переменную, которая может использоваться где угодно, но не кажется хакерской?
Спасибо