Это возможно через удлинение веточки.
Зарегистрировать расширение прут TWIG EXTENSION
Pass в __constructor() - @doctrine служба
services.yml
my.twig.extension:
class: twig\namespace\path
arguments:
kernel: "@kernel"
doctrine: "@doctrine"
tags:
- { name: twig.extension }
Constructor of the new twig extension
protected $kernel;
protected $doctrine;
public function __construct($kernel, $doctrine)
{
$this->kernel = $kernel;
$this->doctrine = $doctrine;
}
Написать некоторый метод:
/** @var string $repository. Example: AppBundle:Product' */
public function myEntity($repository)
{
$manager = $this->doctrine->getManager();
return $manager->getRepository($repository);
}
Регистрация метод MyEntity в расширении веточку:
public function getFunctions()
{
return array(
'myEntity' => new \Twig_Function_Method($this, 'myEntity'),
);
}
Теперь в ваших шаблонах прута вы можете получить доступ к любому хранилищу:
For example:
{#
myEntity('SomeBundle:coolEntity').find()
myEntity('SomeBundle:coolEntity').findAll()
myEntity('SomeBundle:coolEntity').findBy()
...
#}
{% for item in myEntity('SomeBundle:coolEntity').findAll() %}
{{ item.getId() }}
{% endfor %}
Пасс объекты к контроллеру, затем используйте геттеры в своем представлении для получения любых необходимых вам значений. Если это недостаточно динамично, вы можете использовать AJAX. – mika
[вы можете написать пользовательское расширение Twig] (http://symfony.com/doc/current/cookbook/templating/twig_extension.html) – Matteo
, пожалуйста, рассмотрите этот случай, загружая логотип сайта из области администрирования, путь к логотипу сохраняется в базе данных , Чтобы использовать этот логотип в макете, я должен передать его с каждого контроллера? – user1679267