为什么我总是收到消息"你不能转储带参数的容器"在symfony控制台?

时间:2014-05-03 09:25:45

标签: symfony console rabbitmq

在终端中,当我尝试运行创建的命令时,出现以下错误:

[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();
    }
}

1 个答案:

答案 0 :(得分: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. 我建议切换到yml,因为它不那么详细
  2. 如果您愿意,可以为老兔子创建一个别名。