Contributed by
Kévin Dunglas
in #21031.

Autowiring(自动关联)是一组功能,它针对Symfony程序开启了RAD("Rapid Application Development" 快速开发)。某些项目和程序员,需要此种方式的开发,因此我们持续向它添加新功能。

在Symfony 3.3中,我们决定为使用了PHP7.0和以上版本的程序,添加对 getter autowiring 的支持。 思考下面这个简单的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// src/AppBundle/Manager/Publisher.php
namespace AppBundle\Manager;
use AppBundle\Parser\Markdown;
 
class Publisher
{
    protected function getMarkdownParser(): Markdown { }
 
    // ... 译注:从 PHP 7.1 起,大量类型强化手段都与 TypeScript 或 Dart 脚本看齐
    // ... 建议所有 Symfony 用户掌握 PHP 7.1 中的RFC,以更好的使用企业级 PHP 框架
}
 
// src/AppBundle/Parser/Markdown.php
namespace AppBundle\Parser\Markdown;
 
class Markdown
{
    // ...
}

现在,添加以下服务配置:

1
2
3
4
# app/config/services.yml
services:
    AppBundle\Manager\Publisher:
        autowire: ['get*']

Getter autowiring 自动地把 Markdown 类注册成服务,并在 getMarkdownParser() 方法在 Publisher 类中被调用时(并且仅在此时,才对其进行lazy loading[懒加载]) 返回一个实例。

这个功能是我们 experimental features program(功能体验计划)中的一部分,因此,它的落实可能会在Symfony 3.4中发生改变,我们也可能完全删除之。我们需要你在自己的真实程序中进行测试,并和我们分享你的看法。

此功能的文档尚未准备好,但你可以在推上关注 @symfonydocs 来在我们发布此文档时得到通知。