PHP: return function (Container $container) { $container->set(Twig::class, function () use ($container) { $twigSettings = $container->get('settings')['twig']; $appSettings = $container->get('settings')['app']; $twig = new Twig(new FilesystemLoader($twigSettings['path']), $twigSettings['options']); $twig->offsetSet('app_name', $appSettings['name']); // кое-что нужно передать в шаблон заранее return $twig; }); }; мозг смущается: а не предназначена ли сборка сервиса всего лишь для его сборки Атрибут можно при сборке передавать или для этого промежуточное нужно создать и там его передать? Почему спрашиваю? Потому что есть POST-экшены, а там нет вывода, нужно ли мне тогда при вызове POST-экшена дёргать промежуточным сборку атрибутов, сервис-то запакован, а в промежуточном я его распаковываю из контейнера (хотя можно сгруппировать роуты и группе POST-экшенов не вызывать промежуточное с шаблонизаторм), хз... И ещё нужно заголовок страницы передать: PHP: class HomeAction { private Twig $twig; public function __construct(Twig $twig) { $this->twig = $twig; // может быть тут заголовок собрать? } public function __invoke(Request $request, Response $response): Response { $this->twig->offsetSet('page_title', 'Домашняя страница'); // заголовок страницы return $this->twig->render($response, 'guest/home.twig'); } } есть ли разница: в конструкторе заголовок собрать или уже именно в методе? p.s. балуюсь со slim-ом немного, непривычно после самописек
PHP: namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class UserController extends AbstractController { // ... public function notifications(): Response { // получить информацию пользователя и уведомления каким-то образом $userFirstName = '...'; $userNotifications = ['...', '...']; // путь шаблона - это относительн путь файла из `templates/` return $this->render('user/notifications.html.twig', [ // этот массив определяет переменные, переданные шаблону, где ключ - это // имя переменной, а значение - значение переменной // (Twig рекомендует использование имен переменных snake_case : 'foo_bar' вместо 'fooBar') 'user_first_name' => $userFirstName, 'notifications' => $userNotifications, ]); } } --- Добавлено --- HomeAction не наследует родительский класс, у которого имеется фасадные методы по рендеру и т.д. И момент почему ты фанатеешь от магии __инвока, когда у нас дергаются обычные публичные методы после обработки роутера и исходя от правила map карты роутинга, я хз. В результате по первому впечатлению у тебя сейчас каша логическая. Где-то, когда-то подхватил "ухты" фишку и везде стал применять. --- Добавлено --- Вопрос: а если я захочу N страниц со своей микро-логикой сделать и в одном классе описать методы?
@MouseZver а зачем читать вопрос, правильно? и каждом роуте я буду передавать постоянную переменную app_name как дурачок я знаю, как передать пременные третьим параметром метода Twig::render, я шаблонизатор сам могу написать за полчаса, меня интересует просто, в какой момент атрибуты нужно передавать, я всегда передаю при сборке, но так как в данный момент своего занятия моим хобби я колупаю Middleware, поэтому и спрашиваю: а не передавать ли их в middleware если мне нужно будет 98 с половиной методов контроллера, то я и роуты соответсвующие создам под них, и если мне базовый нужен будет то я знаю как от него отнаследоваться я вопросы всегда задаю с предоставлением ПРИМЕРНОГО кода, я не могу сюда захуярить всесь свой проект чтобы ты зубоскалил не читая сути вопроса
Нет, ты даже не понимаешь как устроен Container и об существовании Lazy подгрузки, а после инициализации не взрыхливает снова кишки в пакете Twig::class, он далее использует лишь только instance result этого содержимого. Поэтому дурачек тут ты, думающий что app_name будет снова перезаписываться да и вовсе Twig класс пересоздаваться. Берешь и var_dump туда лепишь и смотришь: Кто из нас тут дурачек, аааа ? А если постоянно у тебя дергается внутренности этого пакета, то уважаемый, у вас самодельный говнокод, а не Container. Поэтому у тебя все остальные вопросы исходят от - грязного фундамента. --- Добавлено --- Хуярь --- Добавлено --- В твоем контроллере не должно быть конструктора точка В твоем контроллере каждый публичный метод полностью отвечает за свою страницу, от заголовка до вывода --- Добавлено --- Роуты ладно. Ты 98 контроллеров создашь ?