Как передать переменные контроллера в EventListener в Symfony2? - PullRequest
3 голосов
/ 18 ноября 2011

Мне надоело писать это в конце каждого действия в Symfony2:

return $this->render('Project:Bundle:view.twig', array(
                                     'foo' => 1,
                                     'bar' => 2
                                 ));

Итак, я попытался подключиться к жизненному циклу запроса сразу после того, как было выполнено какое-то действие, чтобы избавить себя от необходимости печатать. Я хочу иметь возможность сделать что-то похожее на это в моем контроллере:

$this->params = array(
    'foo' => 1,
    'bar' => 2
);

Затем слушатель передает параметры в рендер и автоматически определяет шаблон, используя имя действия. Я понимаю, что для достижения этой цели мне нужно использовать прослушиватели событий, но я не могу подключиться к жизненному циклу в нужное время ...

  • kernel.controller хорошо, потому что я могу добраться до контроллера, но это до того, как действие будет выполнено, поэтому $ this-> params не будет установлен
  • kernel.response после завершения действия, но я не могу получить доступ к самому контроллеру отсюда

К вашему сведению - у меня есть опыт работы с Zend, и это (obv) мой первый раз, когда я использую Symfony2 ... Если я подхожу к этой проблеме совершенно неправильно, кричите!

1 Ответ

2 голосов
/ 18 ноября 2011

Если вы используете SensioFrameworkExtraBundle, вы можете использовать аннотацию @Template() и вернуть массив:

<?php

namespace Acme\FooBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class BarController
{
    /**
     * @Template()
     */
    public function bazAction()
    {
        return array(
            'some_value' => $someValue;
        );
    }
}

Аннотация говорит ему искать представление в расположении по умолчанию на основе пакета,имя контроллера и действия (в данном случае AcmeFooBundle:Bar:baz.html.twig).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...