Я не думаю, что это так плохо - извлекать данные прямо из расширения ветки.В конце концов, если вы не сделаете этого здесь, вам нужно будет сначала извлечь эти записи и затем передать их в расширение для отображения.
Важным моментом является работа с DQL / SQL в репозитории, как вы уже делаете.Это важно для отделения операторов базы данных от другой части вашего проекта.
Проблема, с которой вы столкнулись, заключается в том, что метод getDoctrine
не существует в этом классе.Насколько я понимаю, вы взяли этот код у контроллера, который расширяет базовый контроллер FrameworkBundle
.Базовый контроллер FrameworkBundle
определяет этот метод.
Чтобы преодолеть эту проблему, вам нужно будет ввести правильный сервис в ваш добавочный номер.Это основано на контейнере внедрения зависимости.Вы, безусловно, определили службу для своего расширения ветки, что-то вроде этого определения:
services:
acme.twig.extension.notification:
class: Acme\WebsiteBundle\Twig\Extension\NotificationExtension
tags:
- { name: twig.extension }
Хитрость заключается в том, чтобы теперь вводить зависимости, которые вам нужны, как это:Вы, расширение, вы определяете конструктор, который получает доктрину зависимости:
use Symfony\Bridge\Doctrine\RegistryInterface;
class NotificationTwigExtension extends \Twig_Extension
{
protected $doctrine;
public function __construct(RegistryInterface $doctrine)
{
$this->doctrine = $doctrine;
}
// Now you can do $this->doctrine->getRepository('TennisconnectUserBundle:User')
// Rest of twig extension
}
Это концепция внедрения зависимости.Вы можете увидеть другой вопрос, на который я ответил недавно о доступе к службам вне контроллера: здесь
Надеюсь, это поможет.
С уважением,Matt