2015-04-28 2 views
0

Я получил динамическое содержимое в макете, которое принимает значения из базы данных. Каков наилучший способ добиться этого, а не передавать значения из контроллера.можно вызвать объект из представления (шаблон php) в symfony2

Можно ли вызывать сущность из поля зрения? Я использую шаблон php.

+1

Пасс объекты к контроллеру, затем используйте геттеры в своем представлении для получения любых необходимых вам значений. Если это недостаточно динамично, вы можете использовать AJAX. – mika

+0

[вы можете написать пользовательское расширение Twig] (http://symfony.com/doc/current/cookbook/templating/twig_extension.html) – Matteo

+0

, пожалуйста, рассмотрите этот случай, загружая логотип сайта из области администрирования, путь к логотипу сохраняется в базе данных , Чтобы использовать этот логотип в макете, я должен передать его с каждого контроллера? – user1679267

ответ

2

нет никакого смысла в MVC контексте назвать типовой объект без использования контроллера, по крайней мере, вы можете получить обновленное содержимое с помощью Ajax вызова на контроллер, который возвращает JsonResponse, чтобы избежать обновления страницы

+0

, пожалуйста, рассмотрите этот случай, загружая логотип сайта из области администрирования, путь к логотипу сохраняется в базе данных. Чтобы использовать этот логотип в макете, я должен передать его с каждого контроллера? – user1679267

+1

Лучшее, что вы можете сделать, это использовать контроллер в качестве точки входа для логотипа, контекстуального для текущего состояния системы. т.е. контроллер возвращает ответ изображения (тип содержимого заголовка, установленный на изображение mime) в конечной точке http: //websi.te/ logo.png тогда в вашем шаблоне вы можете использовать всегда известный путь /logo.png это также используется для [отслеживания почты] (http://en.wikipedia.org/wiki/Web_bug) – ROLO

1

Это возможно через удлинение веточки.

Зарегистрировать расширение прут 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 %} 
Смежные вопросы