Php Symfony ExceptionListener:如何处理依赖关系?

Php Symfony ExceptionListener:如何处理依赖关系?,php,exception,symfony,dependency-injection,Php,Exception,Symfony,Dependency Injection,我正在试验基于symfony2组件的我自己的框架,就像Fabien Povertier在一系列教程中描述的那样。到目前为止,我一切都很清楚,除了一件事 我已经建立了本教程最后一部分中描述的容器生成器: 我已将细枝添加到containerbuilder: $sc->register('twigLoader', 'Twig_Loader_Filesystem') ->setArguments(array('%templatePath%')); $sc->register('

我正在试验基于symfony2组件的我自己的框架,就像Fabien Povertier在一系列教程中描述的那样。到目前为止,我一切都很清楚,除了一件事

我已经建立了本教程最后一部分中描述的容器生成器:

我已将细枝添加到containerbuilder:

$sc->register('twigLoader', 'Twig_Loader_Filesystem')
   ->setArguments(array('%templatePath%'));
$sc->register('twig', 'Twig_Environment')
   ->setArguments(array(new Reference('twigLoader'), array()));
此外,当发生异常时,将调用带有ErrorController的部件:

$sc->register('listener.exception', 'Symfony\Component\HttpKernel\EventListener\ExceptionListener')
   ->setArguments(array('Calendar\\Controller\\ErrorController::exceptionAction'));
但要显示由twig呈现的正确错误页面,我需要错误控制器中的twig依赖项。我该怎么做


请注意,我不使用完整的symfony框架,只使用组件

D'Oh。。。我已经有了。我唯一需要更改的是错误控制器不必返回响应对象。取而代之的是,它现在返回一个数组,而我的twig对象的正常响应侦听器正在作出反应,我有一个由twig处理的自定义错误页面…

自从我阅读了该教程以来,已经有一段时间了。一套很好的文章。异常侦听器基本上生成一个新的子请求,并最终调用ErrorController::exceptionAction。exceptionAction用于呈现异常错误页面。这就是您需要向其中注入细枝的类。为此,您需要将ErrorController注册为服务,然后将其注入侦听器,而不是硬编码的类路径。我不知道;我没有确切的代码可以为您复制/粘贴,但至少它为您指明了正确的方向。我已经这样想过了,但是ExceptionListener希望通过setArguments调用得到一个带有控制器名称和方法的字符串。我找不到一种方法来调用ErrorController作为服务。任何进一步的建议都会很有帮助。因此,您加入了自己的自定义响应侦听器,而不是将细枝添加到控制器中?是的。本教程仅使用普通php脚本作为模板,因此我添加了:$sc->register'listener.twig_response','Simplex\TwigResponseListener'->setArgumentsArray新引用'twig';我改变了控制器,它们只返回一个数组,这个数组保存了细枝模板的变量。只有ErrorController仍有返回的新响应。。。。像所有其他控制器一样返回一个数组很有帮助。很好,你让它工作了,但是你真的希望能够使用默认的ExceptionListener。定制控制器是常用的方法。你说ExceptionListener正在排除一个字符串。它真正做的是接受任何控制器可执行文件。您要做的是向它传递一个数组,其中控制器对象作为第一个元素,方法名称作为第二个元素。类似于:arraynew引用'my_exception_controller','exceptionAction'。理解这个过程很重要。我试过了,但没有成功。现在,在你上次回复之后,我发现了原因。我编写了setArgumentsArray新引用'errorcontroller','exceptionAction',但它必须是setArgumentsarraynew引用'errorcontroller','exceptionAction'一个数组元素。现在,错误控制器将独立于响应侦听器的细枝内容输出。非常感谢你的帮助。现在我有两个工作变量如何做;