Nano Hash - криптовалюты, майнинг, программирование

Symfony добавляет функцию репозитория перед рендерингом base.html.twig

В Symfony 3.4, base.html.twig у меня есть панель навигации, показывающая количество сообщений текущего пользователя. Для этого я использую функцию сущности репозитория. Эта функция должна вызываться каждый раз при рендеринге шаблона base.html.twig, но я не хочу помещать эту функцию во все контроллеры, как это сделать с помощью прослушивателя событий перед рендерингом base.html.twig? Переопределить базовый контроллер?

base.html.twig :
  ....
  {{ include top_bar_nav.html.twig }}
  ....

  • Поскольку это строго для рендеринга, вам, вероятно, следует написать собственное расширение ветки: symfony.com/doc/current/templating/twig_extension.html 15.11.2017
  • Я бы сказал «да» с помощью прослушивателя событий перед рендерингом base.html.twig. Кажется, вы француз. поэтому взгляните здесь на учебник openclassroom. Эта страница учебника, кажется, именно о том, что вам нужно. openclassrooms.com/courses/ 15.11.2017
  • да, я француз, и да, openclassrooms очень хорош, но я не нашел решения своей проблемы. Документация такая большая, и я начал с symfony. 15.11.2017

Ответы:


1

Пользовательское расширение Twig - правильный путь:

пример в ветке:

{{ number_of_current_users() }}

создайте расширение ветки следующим образом:

<?php

namespace AppBundle\Twig;

use Doctrine\ORM\EntityRepository;

class UserExtension extends \Twig_Extension
{
    /**
     * @var EntityRepository
     */
    private $userRepository;

    /**
     * @param EntityRepository $repository
     */
    public function __construct(EntityRepository $repository)
    {
        $this->userRepository = $repository;
    }

    /**
     * {@inheritdoc}
     */
    public function getFunctions()
    {
        return array(
            new \Twig_SimpleFunction('number_of_current_users', array($this, 'numberOfCurrentUsers')),
        );
    }

    /**
     * @param $sku
     *
     * @return string
     */
    public function numberOfCurrentUsers()
    {
        return $this->userRepository->getNumberOfCurrentUsers();
    }

    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'user';
    }
}

и зарегистрируйте его так:

app.twig.users:
    class: AppBundle\Twig\UserExtension
    arguments: ['INJECT YOUR USER REPOSITORY HERE']
    public: false
    tags:
        - { name: twig.extension }
15.11.2017
  • спасибо за ваше хорошее решение, реактивность и пример кода! в то же время я прошу просто сделать контроллер для верхней панели и не использовать включение, но визуализировать контроллер в шаблоне ветки, объясните здесь: symfony.com/doc/current/templating/embedding_controllers.html. О чем вы думаете ? 15.11.2017
  • ваше решение тоже хорошо, подумайте о том, что ESI включает в себя: http://symfony.com/doc/3.4/http_cache/esi.html 15.11.2017
  • ESI — это круто, но это динамическое приложение для панели инструментов, поэтому я думаю, что кеш не часто используется. Я выбираю решение контроллера, потому что я делаю много вещей внутри верхней панели с пользовательским контекстом. добрый день и еще раз спасибо. 15.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..