Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: MVC + Twig Вопрос по контроллерам

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
webog
Отправлено: 25 Августа, 2017 - 12:22:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Всем добра!

Шел второй час ночи... Задача не решалась... Направьте на путь истинный!? Очень прошу Улыбка

Итак. Есть MVC (роутинг, контроллер и т.д. все как пологается) и шаблонизатор Twig.
Вопрос: Как вывести постоянную информацию (проверка авторизации, сайдбар и прочая инфа) которая нужна на всех страницах сайта во все public function view всех контроллерах?

Сейчас в /controller/home.php выводится вся инфа для главной и инфа для всех страниц.
Но допустим в /controller/account.php нет инфы для всех страниц.

Спасибо всем кто откликнется! Улыбка


-----
Hello!
 
 Top
Ch_chov
Отправлено: 25 Августа, 2017 - 12:33:28
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Создаете базовый шаблон с блоками и наследуете его в других шаблонах переопределяя нужные блоки.
https://twig.symfony.com/doc/2.x/tags/extends.html

(Отредактировано автором: 25 Августа, 2017 - 12:33:46)

 
 Top
webog
Отправлено: 25 Августа, 2017 - 12:50:11
Post Id


Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Ch_chov пишет:
Создаете базовый шаблон с блоками и наследуете его


Я так и делаю, но возможно не донца так ))

Проблема в том, что в каждый public function view() каждого контроллера нужно прописывать что нужно вывести на страницу. В новостях - новости, в контактах - контакты и т.д.
Но есть страница типо сайдбара, туда нужно выводить постоянно проверку авторизации (заменять форму на приветствие если есть уже авторизация), статистику и т.д.

Мне в каждую вьюху дописывать это? )) Может есть другой путь?


-----
Hello!
 
 Top
Ch_chov
Отправлено: 25 Августа, 2017 - 13:14:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Можно сделать Twig extension и добавить туда функцию для проверки роли текущего пользователя как в Symfony, либо просто добавить глобальную переменную в Twig как в Silex.
 
 Top
webog
Отправлено: 25 Августа, 2017 - 14:06:49
Post Id


Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Ch_chov пишет:
Можно сделать Twig extension и добавить туда функцию для проверки роли текущего пользователя как в Symfony, либо просто добавить глобальную переменную в Twig как в Silex.


Можно чуть подробнее!? Пожалуйста Улыбка


-----
Hello!
 
 Top
Ch_chov
Отправлено: 25 Августа, 2017 - 14:19:27
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




 
 Top
webog
Отправлено: 26 Августа, 2017 - 02:00:56
Post Id


Частый гость


Покинул форум
Сообщений всего: 242
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)

[+]


Ch_chov пишет:
Тут очено подробно.


Все это здорово. Но глобальные переменные выводятся в контроллерах. Пример: application/controller/home.php - главная страница. Вот на ней все есть: и проверка авторизации и в сайдбаре информация.
Но как только перешли допустим в application/controller/contacts. php - Контакты. Все это пропало. Ни проверки авторизации (что бы вместо Авторизация было - Профиль) ни сайдбара.

Вопрос в том, что бы вывести это все 1 раз и навсегда везде - во всех контроллерах.
(Добавление)
webog пишет:
Вопрос в том, что бы вывести это все 1 раз и навсегда везде - во всех контроллерах.


P.S. Прописываю: мультиязычность, чекаю авторизацию, инфу в сайд бар(статистика с базы) и т.д. Во всех контроллерах это писать? А если имя изменится или добавить нужно будет? Во всех 100шт контроллерах дописывать и переписывать? Копипаст дикий )) Нужно 1 раз Улыбка


-----
Hello!
 
 Top
Ch_chov
Отправлено: 26 Августа, 2017 - 05:29:57
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Цитата:
Во всех 100шт контроллерах дописывать и переписывать?

Общую логику нужно вынести в родительский класс или трейты, либо в отдельные сервисы.

Глобальные регионы и блоки можно добавить к ответу контроллера через механизм событий (как в Друпале).

Другой подход это создание собственных контроллеров для отдельных регионов (как в Симфони).
https://symfony.com/doc/current/templating/embedding_controllers.html

(Отредактировано автором: 26 Августа, 2017 - 09:17:09)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB