首页 文章

Symfony手动连接参数 - 'arguments' vs 'bind'

提问于
浏览
1

我试图弄清楚如何手动将参数注入 DefaultController (没有自动装配) . 我发现有两种方法可以实现这一目标 .

我可以用 arguments

services:
    _defaults:
        autowire: false
        autoconfigure: true
        public: true

    App\Service\SomeService: ~

    App\Controller\DefaultController:
        arguments:                                    #!
            $service: '@App\Service\SomeService'
            $scalar: 22

与此同时,我可以使用 bind 键:

services:
    _defaults:
        autowire: false
        autoconfigure: true
        public: true

    App\Service\SomeService: ~

    App\Controller\DefaultController:
        bind:                                         #!
            $service: '@App\Service\SomeService'
            $scalar: 22

我的控制器:

class DefaultController extends Controller
{
    public function __construct($service, $scalar)
    {
        var_dump(get_class($service), $scalar);
    }
...

两个选项都产生相同的输出:

string(23)“App \ Service \ SomeService”int(22)

那么这两个配置键 argumentsbind 之间有什么区别,它们是否完全相同?

2 回答

  • 1

    bind 通常用于 _defaults 部分,以替换该文件定义的服务中的任何匹配参数名称 .

    因此,从第二个示例中获取变量名称,并将它们放入更常见的 _defaults: 节中

    _defaults:
        # autowire / autoconfig, etc
        bind:                                         #!
            $service: '@App\Service\SomeService'
            $scalar: 22
    

    具有这些变量名称的任何服务都将被替换(除非在本地覆盖)服务或标量值(22) .

  • 1

    如Alister Bulman所解释的, bind 用于更全面的方法 . 但是当在类定义上使用时, bindarguments 或多或少相同 .

    我看到的唯一区别是 arguments 更灵活并接受一个数组:

    App\Controller\DefaultController:
        arguments:
            - '@App\Service\SomeService'
            - 22
    

    arguments 也优先于 bind .

    我想文档是不一致的,因为 bind 是相对较新的 .

相关问题