Symfony2-服务中参数的实例化

Symfony2-服务中参数的实例化,symfony,symfony-2.3,Symfony,Symfony 2.3,我遇到了一点问题,我不知道我是完全愚蠢,想象力过剩,还是没有完全掌握服务 假设我有一个定义如下的服务: awesome: class: "\\My\\Bundle\\Services\\Awesome" arguments: fantabulous: @fanta.bulous #which refers to \\Another\\Bundle\\Services\\Fantabulous 假设我有一个控制器TestController,其中我有以下操作 pu

我遇到了一点问题,我不知道我是完全愚蠢,想象力过剩,还是没有完全掌握服务

假设我有一个定义如下的服务:

awesome:
    class: "\\My\\Bundle\\Services\\Awesome"
    arguments:
        fantabulous: @fanta.bulous #which refers to \\Another\\Bundle\\Services\\Fantabulous
假设我有一个控制器TestController,其中我有以下操作

public function someAction()
{
    $awesome = $this->get('awesome');
    $awesome->doSomething();
}
假设一个优秀的职业是这样的:

class Fantabulous
{
    protected $number;

    public function __construct($anyNumber)
    {
        $this->number = $anyNumber;
    }

    public function printNumber()
    {
        return $this->number;
    }
}
class Awesome
{
    protected $fantabulous;

    public function __construct(Fantabulous $fantabulous)
    {
        $this->fantabulous = $fantabulous;
    }

    public function doSomething()
    {
        echo $this->fantabulous->printNumber();
    }
}
假设这项很棒的服务如下所示:

class Fantabulous
{
    protected $number;

    public function __construct($anyNumber)
    {
        $this->number = $anyNumber;
    }

    public function printNumber()
    {
        return $this->number;
    }
}
class Awesome
{
    protected $fantabulous;

    public function __construct(Fantabulous $fantabulous)
    {
        $this->fantabulous = $fantabulous;
    }

    public function doSomething()
    {
        echo $this->fantabulous->printNumber();
    }
}
我现在的问题是:如何从我的TestController传递任何数字(例如14)来初始化Fantabulous?我一直在到处寻找答案,但找不到答案,在我看来,每个人都不会在服务中提供任何东西


谢谢。

你不能!不完全是在这种情况下。您不能从服务容器调用任何服务并同时传递参数。但是,您可以遵循以下方法:

将setter方法添加到fantablue::setNumber和 在construct上打开可选的$anyNumber参数; 创建手头的对象,而不是从容器中调用它; 创建一项服务以创建令人敬畏的服务或其他服务 服务; 一旦项目存储库中已经有了您想要的内容,您可能希望查看一下并找出建议未被批准的原因。 有用链接:


好吧,那太令人失望了。1.我不认为这会解决任何问题,因为我无法控制真棒。2.我不想修改供应商本身,因为我认为这不是做事的方式。3.据我所知,它并没有为我提供从控制器传递参数的解决方案。我很惊讶没有人有这样一个用例,它看起来相当直截了当。假设我有一个动作设置为someAction的表单,我如何传递表单数据来初始化Fantabulous,以便它可以被Awesome使用。这是我的问题。@JulienLachal这不是因为没有人有像这样的用例。这只意味着你正在尝试的是一种错误的方法。如果一个服务需要动态参数值,它不应该是一个服务!它应该类似于实用程序My\Bundle\Util\MyClass。事实上,我几乎可以肯定你的服务不是一个很好的服务候选人。