Глобальные переменные в Laravel для представлений, контроллеров, моделей и т. Д. - PullRequest
0 голосов
/ 19 мая 2019

Я знаю, что этот вопрос задавался ранее, но я изо всех сил пытаюсь найти ответ, который соответствует моим потребностям или для самой современной версии 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, с которого расширяются все остальные контроллеры. Я поместил эти переменные в конструктор и вручную передал их в представление в каждом методе. (Я знаю, что это грязно и не работает для моделей).

Так какое же лучшее решение здесь? Где объявить глобальную переменную, которая может использоваться где угодно, но не кажется хакерской?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...