1

我有服务。

manager.summary.order:
    class: Travelyo\CoreBundle\Services\Managers\Order\OrderSummaryManager
    arguments:
        template:       '@templating'
        router: '@router'

该渲染 html(使用 twig)稍后将通过邮件发送或显示。

在我的 Symfony2.1 项目中使用此服务时,我没有任何问题。在这个树枝中,我有不同的调用,例如app.request.locale& number_format_currency

在我的测试控制器中调用此服务时。

我得到那个错误

Twig_Error_Runtime: An exception has been thrown during the rendering of a 
template ("You cannot create a service ("request") of an inactive scope
 ("request").") in "TravelyoCoreBundle:Mail:confirmation_mail.html.twig" at line 63.

这是我的控制器。

namespace Travelyo\ConfigurationBundle\Tests\Order;

use Travelyo\CoreBundle\Event\Order\OrderEvent;
use Travelyo\CoreBundle\Entity\Order\Order;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Travelyo\CoreBundle\Session\EtSession;
use Travelyo\CoreBundle\Services\Managers\OrderProcessManager;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class OrderSaveToDbTest extends WebTestCase {
    private $summaryManger;
    public function setUp()
    {
        static::$kernel = static::createKernel();
        static::$kernel->boot();
        $client = static::createClient();
        $client->request(
                'GET', '/clients/123456',
                array('SERVER_NAME' => 'travelyo'), /* request params */
                array(), /* files */
                array('X-Requested-With' => "XMLHttpRequest",'SERVER_NAME' => 'travelyo'));

        $this->summaryManger = static::$kernel->getContainer()->get('manager.summary.order');
    }

    public function testSaveAndSend()
    {
        $this->summaryManger->generateHml();

    }
}

知道如何不出现此错误吗?

我尝试将 scope=request 添加到我的服务中。但是此服务被我的应用程序中的其他服务使用

谢谢

4

1 回答 1

0

要将请求放入您的服务中,请使您的服务 yml

manager.summary.order:
class: Travelyo\CoreBundle\Services\Managers\Order\OrderSummaryManager
arguments:
    template:       '@templating'
    router: '@router'
    - "@service_container"

然后在您的服务文件中,您需要添加一个构造函数:

namespace Travelyo\ConfigurationBundle\Tests\Order;

class OrderSaveToDbTest extends WebTestCase {

    protected $container;

    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    /* the rest of your controller/service */
}

那么使用容器来获取请求就真的很简单了:

$request = $this->container->get('request');

我可能有一些不完全正确的,但它的一般想法。查看此链接以获取有关使用范围的更多信息:http: //symfony.com/doc/2.1/cookbook/service_container/scopes.html

于 2013-03-08T23:22:47.007 回答