2014-05-03 31 views
2

在終端,當我嘗試運行我創建的命令,我得到以下錯誤:爲什麼我總是在symfony控制檯中收到消息「您無法轉儲具有參數的容器」?

[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]] 

You cannot dump a container with parameters that contain references to other services (reference to service "old_sound_rabbit_mq.split_file_producer" found in "/rabbit"). 

這是發生了什麼,當我跑我的新創建的控制檯命令:

$this->getContainer()->get('split_file')->process(); 

我不知道爲什麼它說You cannot dump!我不會在該項目中存儲任何內容。

有什麼我不知道的?

編輯
我services.yml的一部分:

<parameters> 
     <parameter key="file_path">/var/www/path/file.xml</parameter> 
     <parameter key="rabbit" type="service" id="old_sound_rabbit_mq.split_file_producer" /> 
</parameters> 

<service id="split_file" class="Acme\DemoBundle\SplitFile"> 
      <argument>%file_path%</argument> 
      <argument>%rabbit%</argument> 
</service> 

這是我的控制檯命令類:

namespace Acme\DemoBundle\Command; 

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; 
use Symfony\Component\Console\Input\InputInterface; 
use Symfony\Component\Console\Output\OutputInterface; 

class ReadFileCommand extends ContainerAwareCommand 
{ 
    protected function configure() 
    { 
     $this->setName('reader:read-file'); 
    } 

    protected function execute(InputInterface $input, OutputInterface $output) 
    { 
     $this->getContainer()->get('split_file')->process(); 
    } 
} 
+0

高速緩存時,容器被傾倒。 –

+0

你是什麼意思@WouterJ ?? – ALH

+0

使用split_file的服務定義更新您的問題。另外,請確認剛剛運行的應用程序/控制檯會觸發相同的錯誤。也可能嘗試高速緩存的清除。 – Cerad

回答

0

參數只能有一個鍵值。你不能將服務等添加到參數中。

<service id="split_file" class="Acme\DemoBundle\SplitFile"> 
     <argument>%file_path%</argument> 
     <argument type="service" id="old_sound_rabbit_mq.split_file_producer"/> 
</service> 

http://symfony.com/doc/current/book/service_container.html

  1. 我建議切換到陽明,因爲它是那麼詳細
  2. ,如果你想你可以創建一個老兔的別名。
+3

Xml更強大,可以使用XML模式進行驗證。使用它真的沒什麼問題 –

+0

在定義symfony服務的上下文中,xml到底是多麼「強大」,然後yaml?在這個特定問題的上下文中,解釋驗證的「可能性」實際上是如何幫助的沒有完成?最後,如果他試圖用yaml定義一個帶有鍵的參數,那麼錯誤信息就是關於一個不存在的參數,而不是這個轉儲的東西。 – Cerad

+0

在XML上下文中編寫RabbitMQ的正確方法是什麼?暫時我不想花更多時間在其他事情上,謝謝。 – ALH

相關問題