Всем добра! Да да, я знаю все и всех задрали этим шаблоном, но все же хочу для себя выяснить раз и навсегда! Помогите пожалуйста! Проблема такая... Есть боковая колонка на сайте (sidebar), есть меню там же. Как и куда (правильнее/логичнее) передавать сайд бар и меню? У меня сейчас так: В MainController, в actionIndex передаю. Это для главной страницы. Но стоит зайти в Новости допустим - сайдбара нет. Контроллер уже другой. Так что бл@ть в каждый писать? Спасибо!
В Yii2 для этого введено понятия виджета, код которого сам делится на некое подобие контроллера и вида, и в этом "контроллере" можно даже запросить данные из модели. В своём MVC можно сделать также. https://www.yiiframework.com/doc/guide/2.0/en/structure-widgets В Laravel есть компоненты, и есть View Composers (как нормально на русский перевести - не знаю), через которые можно передать вне контроллера данные в просмотр. Но, поскольку виджеты - удобная штука, есть пакеты, добавляющие виджеты в Laravel В Kohana для таких случаев были возможны внутренние вызовы контроллера.
Разные способы бывают. Ты например можешь в своем приложении организовать подключение основного шаблона, который у тебя будет везде на сайте, а в него уже встраивать вид с контентом, или вид с твоей этой менюшкой в сайдбаре. А что бы каждый раз не прописывать этот код -- создай класс контроллера (ParentController), там реализуй подключение файла вида с сайдбаром или с чем либо еще, а в остальных классах-контроллерах (ChildControllers) наследуйся от него (от ParentController)
Я бы сделал так своем велосипеде)) 1. Создал бы в конфиге новый блок.. в котором бы указывал контроллер и экшен и к нему массив с названиями классов из которых надо сделать объекты перед запуском контроллера.. объекты этих бы классов отправлял в реестр. 2. А потом бы в шаблоне сделал бы что то типа PHP: if(!empty(Registry::get('sideBar'))){ $this->renderWidget('leftSideBar', [Registry::get('side_bar')]); } т.е. перед созданием контроллера создали объект виджета.. а потом если он есть то отправили данные в шаблон виджета. Для виджетов лучше сделать отдельную директорию и метод в классе View..