这是第41篇也是最后一篇 Symfony 4.1新功能 博客,此版框架将在五月末发布并在2019年1月停止维护 (参考 Symfony 4.1 路线图)。

向 ControllerTrait 添加了 getParameter() 方法

Contributed by
Robin Chalas
in #25439.

Symfony 为控制器提供了两个可选的基类: ControllerAbstractController。它们很像,但推荐的是 AbstractController 因为它更有约束性: 它不允许你通过 $this->get()$this->container->get() 来直接访问服务。

在 Symfony 4.1 中我们改进了 AbstractController 添加常用的 helper getParameter(),来获取容器中任何一个 config parameter(配置参数)的值。这种改变让从 Controller 转进到 AbstractController 变得十分容易。

PHP DSL 中的匿名服务

Contributed by
Nikita Konstantinov
in #24632.

在 Symfony 3.4 中我们引入了 PHP DSL 来配置路由和服务。在 Symfony 4.1 我们改进了它,添加了对 anonymous services(匿名服务)的支持,这在你不关心服务名称的情况下十分有用 (比如在对服务进行装修时)。

1
2
3
4
5
6
7
// app/config/services.php
return function (ContainerConfigurator $container) {
    $services = $container->services();
    // to create an anonymous service, pass null as its ID argument
    // 创建匿名服务,向 ID 参数传入 null
    $services->set(null, stdClass::class)->tag('listener');
};

添加了对从构造器中提取type的支持

Contributed by
Grégoire Pineau
in #25605.

在 Symfony 4.1 中,PropertyInfo组件ReflectionExtractor 类添加了一个新的 $enableConstructorExtraction 参数,可以通过构造参数来内省属性信息。

思考下例:

1
2
3
4
5
6
7
8
9
10
class SomeClass
{
    public $property1;
    public $property2;
 
    public function __construct(string $property1, ?int $property2)
    {
        // ...
    }
}

在 Symfony 4.1 中当此选项被开启时, PropertyInfo 会告诉你 property1 是一个非空字符串的 type,以及 property2 是一个非空整型。

可配置的 PHP 错误日志之级别

Contributed by
Hamza Amrouche
in #26504.

framework.php_errors.log 选项让你使用程序级日志功能而不是 PHP 的 logger 来记录 PHP 错误。

在 Symfony 4.1 中,此一选项不再使用布尔值来开启或关闭。若你传入了整数,你便开启了这功能,并且把 PHP logger 设定在为该值所对应的级别。