Как отобразить глобальную переменную в ветке?

Контроллер

$count_em =  $this->getDoctrine()->getRepository('AppBundle:St_Jude_Email');
    $count_dql = $count_em->createQueryBuilder('c')
            ->select('count(c.flag)')
            ->where('c.flag = 0');
    $flag_count = $count_dql->getQuery();
    $count = $flag_count->getSingleScalarResult();

    return $count;

config.yml

 Twig:
  globals:  
    count: '@AppBundle\Controller\countMail'

Как отобразить счет, который является глобальным в ветке?? Извините, я новичок в Symfony и не знаю, как отобразить 'count' в ветке. Я попытался сделать {{ count }}, но получил ошибку "Возникла исключительная ситуация во время рендеринга шаблона ("Catchable Fatal Error: Объект класса AppBundle\Controller\countMail не может быть преобразован в строку ")".

3 ответа

Если вам нужно вернуть его в Template - верните его в виде массива.

return ['count' => $count];

В других случаях, если вам нужно использовать глобально, вам нужно использовать расширение ветки, посмотрите эту документацию.

@AppBundle\Controller\countMail - это сервисная ссылка. В вашем случае вам нужно создать сервис Symfony - https://symfony.com/doc/current/service_container.html Затем ссылаться на этот сервис как на глобальную ветку var. Затем в вашем шаблоне вы ссылаетесь на любой открытый метод из сервиса, например {{ count.methodThat ReturnsSomeValue }}

при таком подходе вам не нужно передавать что-либо для рендерера веток в каждом действии контроллера

Вы должны создать сервис, например MailServiceкоторый содержит, например, countAllMail() метод. В этом методе вы можете делать свои вещи БД. После этого вы можете сделать следующее:

config.yml

twig:
    globals:
        my_global_mail_service: '@AppBundle\Service\MailService'

И в своем шаблоне ветки вы можете использовать свой сервис, как это

{{ my_global_mail_service.countAllMail() }}
Другие вопросы по тегам