2017-06-23 44 views
2

我想添加一個額外的包到symfony會話。如何添加額外的包到symfony會話

我這樣做,在編譯過程:

public function process(ContainerBuilder $container) 
{ 
    $bag = new AttributeBag("my_session_attributes"); 

    $container->getDefinition("session") 
     ->addMethodCall("registerBag", [$bag]); 
} 

但是我得到消息的異常:

無法轉儲服務容器,如果一個參數是一個對象或 資源。

這裏是跟蹤堆棧:

在XmlDumper.php線
  1. 在XmlDumper :: phpToXml(對象(AttributeBag))在XmlDumper.php線328
  2. 在XmlDumper- >數組(對象(AttributeBag)),數組(對象(AttributeBag)),'參數',對象(DOMElement))在XmlDumper.php 94
  3. at XmlDumper-> addMethodCalls(array('registerBag',array(object(AttributeBag)) )),object(DOMElement))in XmlDumper.php 線183
  4. 在XmlDumper-> addService(對象(定義), '會話',對象(一個DOMElement))在XmlDumper.php線272
  5. 在XmlDumper-> addServices在XmlDumper.php(對象(一個DOMElement))線52
  6. 在XmlDumper->轉儲()在ContainerBuilderDebugDumpPass.php管線34
  7. 在ContainerBuilderDebugDumpPass->處理(對象(ContainerBuilder))在 Compiler.php線104
  8. 在反編譯>編譯(對象( ContainerBuilder))ContainerBuilder.php line 598
  9. at ContainerBuilder-> compile ()在Kernel.php線182
  10. 在內核級>手柄Kernel.php線514
  11. 在內核級> initializeContainer()在Kernel.php線133
  12. 在內核級>引導()(對象在app_dev.php線(請求))29

我應該如何添加新的包,如果我不能傳遞對象參數在服務定義?

回答

2

好吧,剛發佈問題後,我有一個想法,我認爲這是一種解決方法,但它的工作原理。

的AttributeBag已被註冊爲服務過:

public function process(ContainerBuilder $container) 
{ 
    $bagDefinition = new Definition(); 
    $bagDefinition->setClass(AttributeBag::class); 
    $bagDefinition->addArgument("my_session_attributes"); 
    $bagDefinition->addMethodCall("setName", ["my_session_attributes"]); 
    $bagDefinition->setPublic(false); 
    $container->setDefinition("my_session_attributes_service", $bagDefinition); 

    $container->getDefinition("session") 
     ->addMethodCall("registerBag", [new Reference("my_session_attributes_service")]); 
}