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。事实上,我几乎可以肯定你的服务不是一个很好的服务候选人。