这是关于Symfony 3.2亮点系列的最后一篇文章。在6个月的工作和数百次的pull requests(其中有超过200项被标记为“新功能”)之后,Symfony 3.2将于本月末发布。

VarDumper的改进

Contributed by
Nicolas Grekas.

VarDumper组件 在Symfony 3.2中得以大幅强化并新增多项功能。另外还有一个最有意思的选项,是返回剥离出的内容而不是输出它们。当使用组件中的方法而不是Twig中的 dump() 函数时,这令你能够把剥离的内容存到字符串中:

1
2
3
4
5
6
7
8
9
10
11
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
 
$cloner = new VarCloner();
$dumper = new CliDumper();
 
// Before: dump contents / 之前:剥离内容
$dumper->dump($cloner->cloneVar($variable));
 
// After: store the dumped contents in a string / 之后:将剥离出的内容存到字符串
$result = $dumper->dump($cloner->cloneVar($variable), true);

其他有趣功能是 maxDepthmaxStringLength 的显示选项 (见 #18948) 以及将“克隆出来的数据结构之局部”dump出来的能力 (见 #19672)。

允许编译使用了annotations的类

Contributed by
Titouan Galopin
in #19205.

提升Symfony程序性能的一个简单方式,是在你的bundles中使用 addClassesToCompile() 方法,把你的一些类,给添加到由Symfony生成的启动文件(boostrap file)中,即可降低I/O文件吞吐操作。

然而这个方法的一个特别要求是,你不能编译使用了annotations的类。在Symfony 3.2中,我们添加了一个全新的 addAnnotatedClassesToCompile() 方法,允许缓存那些类了。编译带有annotations的类的一个好处是,annotation reader的缓存也被warm up了。(译注:缓存预热是为了避免缓存命中发生在首位用户身上,参考 这里

最后,addClassesToCompile()addAnnotatedClassesToCompile() 都支持在声明类时使用通配符:

1
2
3
4
5
6
7
$this->addAnnotatedClassesToCompile(array(
    // classes defined using wildcards / 使用通配符定义的类
    '**Bundle\\Controller\\',
    '**Bundle\\Entity\\',
    // class defined explicitly using its FQCN / 使用FQCN显式定义的类
    'Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller',
));

从FrameworkBundle中删除了的依赖

Contributed by
Fabien Potencier.

Symfony FrameworkBundle 把解耦的组件带入到web开发框架中。在之前的Symfony版本中,这个bundle定义了一大堆“用到那些组件”的硬性依赖。

Symfony 3.2中,我们消除了大量硬性依赖,所以如果你不需要的话,这些组件将不在你的程序中进行安装:Templating组件,Translation组件,Asset组件,Security core和Security CSRF组件,以及Doctrine的annotations库等。

为ExpressionLanguage新增了一个AST dumper

Contributed by
Grégoire Pineau
in #19013.

在Symfony 3.2中,ExpressionLanguage组件 添加了一种方法来dump表达式的AST (Abstract Syntax Tree)。这将能够静态地去分析表达式(来验证它们、优化它们,等等),乃至能够动态地去调整表达式。

重构的Twig Extension

Contributed by
Fabien Potencier
in #20093, #20094.

从Twig 1.26起,filters, functions 以及 tests,可以使用一个“与其所属的extension”不同的类。在Symfony 3.2中,最为严苛的Twig extensions已基于此项功能而重构,诸HttpKernelExtension,它定义了 render()controller() 这两个Twig函数。此外,还引入了一些优化措施,来避免Twig扩展在与其相关联的组件“未被安装”时被加载。