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 に答える