Ответ 1
Вы правы в отношении renderView()
, это только ярлык для контроллеров. При использовании класса сервиса и при вставке службы шаблонов все, что вам нужно сделать, это изменить вашу функцию на render()
. Поэтому вместо
return $this->renderView('Hello/index.html.twig', array('name' => $name));
вы бы использовали
return $this->render('Hello/index.html.twig', array('name' => $name));
Обновление от ответа Оливии:
Если вы получаете циклические опорные ошибки, единственный способ их - ввести весь контейнер. Это не считается лучшей практикой, но иногда этого нельзя избежать. Когда мне приходится прибегать к этому, я по-прежнему устанавливаю переменные класса в конструкторе, чтобы я мог действовать так, как если бы они были введены напрямую. Поэтому я сделаю:
use Symfony\Component\DependencyInjection\ContainerInterface;
class MyClass()
{
private $mailer;
private $templating;
public function __construct(ContainerInterface $container)
{
$this->mailer = $container->get('mailer');
$this->templating = $container->get('templating');
}
// rest of class will use these services as if injected directly
}
Обратите внимание, что я только что протестировал собственный автономный сервис в Symfony 2.5 и не получил циркулярной ссылки, непосредственно введя почтовые программы и службы шаблонов.