У меня этот код внутри обычного контроллера symfony2:
$temp = $this->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array( 'c'=> $content[$i], 'ordernumber' => 1, ));
И он отлично работает.
Теперь я пытаюсь перенести это на службу, но я не знаю, как получить доступ к эквиваленту $ этого нормального контроллера.
Я попытался впрыснуть контейнер следующим образом:
$systemContainer = $this->container; $temp = $systemContainer->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array( 'c'=> $content[$i], 'ordernumber' => 1, ));
Но это не сработало, и я предполагаю, что это потому, что рендер на самом деле не использует контейнер $ this-> обычного контроллера, а использует только эту часть $.
Кто-нибудь знает, как использовать $ this-> render () из службы?
Выполнить render
метода в классе Symfony\Bundle\FrameworkBundle\Controller
. В нем говорится:
return $this->container->get('templating')->render($view, $parameters);
поэтому, поскольку у вас уже есть контейнер, вы можете использовать его, как в приведенном выше примере.
ПРИМЕЧАНИЕ. Включение всего контейнера в эксплуатацию считается плохой практикой, в этом случае вам следует вводить только шаблонный движок и вызывать метод render
объекта шаблонирования.
Итак, полная картина:
services.yml
:
services: your_service_name: class: Acme\YourSeviceClass arguments: [@templating]
твой класс:
public function __construct($templating) { $this->templating = $templating }
и ваш вызов рендеринга:
$this->templating->render($view, $parameters)