无法在kernel.terminate上创建服务

时间:2015-01-07 17:15:16

标签: symfony

从Symfony 2.5升级到2.6后,我无法使用asset上的kernel.terminate帮助器呈现树枝模板。这是一个简化的测试用例:

class TestController extends Controller
{

    public function myAction(Request $request)
    {
        $this->container->get('event_dispatcher')->addListener(KernelEvents::TERMINATE, function() {
            $service = $this->container->get('templating.helper.assets');
            $url = $service->getUrl('logo.png');
        });

        return new Response('Finished');
    }
}

抛出以下异常:

InactiveScopeException in *** line ***: You cannot create a service ("templating.helper.assets") of an inactive scope ("request").

使用Symfony 2.5,这很好用。我在changelog from 2.5 to 2.6中找不到任何重要内容。

1 个答案:

答案 0 :(得分:1)

在您发送回复后访问请求是没有意义的。你正在做一些奇怪的事......

如果您需要发送HTML格式的电子邮件,可以使用memory spool,它将在活动结束后发送电子邮件。

如果您正在运行某种后台任务,则应考虑使用其他CPU线程。如果使用相同的线程运行后台任务,则会提供HTTP请求,然后新请求将等待后台任务完成。有关此内容的详细信息,请参阅PHP-FPM池下的this resource

事实上,您不需要 进行模板化的请求。您需要 请求。你可以这样做:

$request = new Request(); //You may want to set locale and domain etc..
$this->container->enterScope('request');
$this->container->set('request', $request, 'request');