Dan*_*ler 8 php symfony symfony4
我试图弄清楚如何手动注入参数DefaultController(没有自动装配)。我发现有两种方法可以实现这一目标。
我可以使用arguments:
services:
_defaults:
autowire: false
autoconfigure: true
public: true
App\Service\SomeService: ~
App\Controller\DefaultController:
arguments: #!
$service: '@App\Service\SomeService'
$scalar: 22
Run Code Online (Sandbox Code Playgroud)
与此同时,我可以使用bind密钥:
services:
_defaults:
autowire: false
autoconfigure: true
public: true
App\Service\SomeService: ~
App\Controller\DefaultController:
bind: #!
$service: '@App\Service\SomeService'
$scalar: 22
Run Code Online (Sandbox Code Playgroud)
我的控制器:
class DefaultController extends Controller
{
public function __construct($service, $scalar)
{
var_dump(get_class($service), $scalar);
}
...
Run Code Online (Sandbox Code Playgroud)
这两个选项产生相同的输出:
string(23) "App\Service\SomeService" int(22)
那么究竟是什么这两个配置项之间的差异arguments和bind,他们做同样的事情?
bind通常在该_defaults部分中用于替换由该文件定义的服务中的任何匹配参数名称。
因此,从第二个示例中获取变量名称,并将它们放入更常见的_defaults:节中
_defaults:
# autowire / autoconfig, etc
bind: #!
$service: '@App\Service\SomeService'
$scalar: 22
Run Code Online (Sandbox Code Playgroud)
任何具有这些变量名称的服务都将替换(除非在本地覆盖)服务或标量值 (22)。
| 归档时间: |
|
| 查看次数: |
1542 次 |
| 最近记录: |