Как отобразить глобальную переменную в ветке?
Контроллер
$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() }}