Symfony 3.2中包含了海量微调和改进,以令开发更容易,并且提高你的生产力。本文总结了一些 DX 改进点:
添加了进度条回退的能力 ¶
比如,当某些任务的工作量“无法被事先决定”时,这就非常有用了。这种场合,你可以通过 advance()
方法来设置一个负步数,即可令进度条回退:
1 2 3 4 5 6 7 8 9 10 11 | use Symfony\Component\Console\Helper\ProgressBar;
$progress = new ProgressBar($output, 100);
$progress->start();
// ... do some work / 进行一些操作
$progress->advance(30);
// new tasks are created, regress the bar by 10 steps
// 新任务创建了,令进度条退回10步
$progress->advance(-10); |
自动侦测服务定义的类 ¶
在PHP 7.x中,在方法中可以定义其返回值的类型(译注:这种写法和typescript有点像)。例如:
1 2 3 4 | public function myFactory(): MyServiceClass
{
// ...
} |
在Symfony 3.2中,我们已经添加了 FactoryReturnTypePass
这个compiler pass,可以自动更新这些“定义了返回值类型”的工厂方法之服务定义。
添加对PhpStorm links的支持 ¶
Symfony的 framework.ide 配置选项把任何“在Symfony错误页中显示的文件路径”给转换成“可点击链接”,即可在你心仪的编辑器/ide中,开打开那个真实的文件及行号。我们已经支持了许多种编辑器(SublimeText, Vim等等),以及,在Symfony 3.2中,支持了PhpStorm。
添加对表单类型扩展优先级的支持 ¶
Form extension可谓基于已有的Symfony表单类型来添加自定义功能的最佳方式。这些扩展作为打了特殊的 form.type_extension
标签的服务而被开启。在Symfony 3.2中,该标签定义了一个新的可选属性,叫做 priority
,以便能够更好地控制“表单类型扩展被加载”时的顺序:
1 2 3 4 5 6 | services:
app.form.image_type_extension:
class: AppBundle\Form\Extension\ImageTypeExtension
tags:
- { name: form.type_extension, priority: -128,
extended_type: Symfony\Component\Form\Extension\Core\Type\FileType } |
对JsonResponse添加了一个已命名的构造器 ¶
如果你创建了一个 JsonResponse
对象,内含已经被转码为Json字符串的内容,你必须传入一个 true
作为 JsonResponse
可选的第四个参数:
1 2 | // $contents = '{"foo":"bar"}';
return new JsonResponse($contents, Response::HTTP_OK, [], true); |
在Symfony 3.2中,你可以使用全新的 fromJsonString()
已命名构造器(named constructor):
1 2 | // $contents = '{"foo":"bar"}';
return JsonResponse::fromJsonString($contents); |
为service configurators(服务配置器)添加了一个快捷语法 ¶
Service Configurator 允许你“在服务被实例化之后”使用回调来配置它。在Symfony 3.2中,你可以使用一个快捷语法来将其定义在YAML配置文件中:
1 2 3 4 5 6 7 8 | services:
app.some_service:
class: ...
# Traditional syntax / 传统语法
configurator: [ '@app.configurator', 'configure' ]
# New short syntax supported by Symfony 3.2
# Symfony 3.2支持的快捷语法
configurator: 'app.configurator:configure' |
当更新翻译源时允许指定一个domain ¶
translation:update
命令现已支持 --domain
选项来更新“仅和该domain相关”的messages(翻译信息)。这在那些定义了许多translation domain(翻译域)的复杂程序中非常有用。
1 | $ ./bin/console translation:update en --force --domain=admin |
简化了transChoice()方法 ¶
transChoice()
PHP函数已经被简化,以匹配Twig中的 transchoice
调节器。这意味着你不需要再提供“用于选出合适的翻译”的数字参数值给可选的第三个参数:
1 2 3 4 5 6 7 | // Before / 之前
$this->get('translator')
->transChoice('1 apple|%count% apples', 7, ['%count%' => 7]);
// After / 现在
$this->get('translator')
->transChoice('1 apple|%count% apples', 7); |