允许设置 MoneyType 的精度策略

Contributed by
syastrebov
in #26767.

在 Symfony 4.1 中,MoneyType 表单字段定义了一个新的名为 rounding_mode 的选项,来控制数值的四舍五入。之前,所有的值都会根据 "the nearest neighbor(最近邻居)" (ROUND_HALF_UP) 来入,因此 15.999 就被入到 16.00。现在你可以设置 ROUND_DOWN 来把它显示成 15.99:

1
2
3
4
5
6
7
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
// ...
 
$builder->add('price', MoneyType::class, array(
    'rounding_mode' => NumberToLocalizedStringTransformer::ROUND_DOWN,
));

更高效地添加和删除 LDAP 属性

Contributed by
Jean-Guilhem Rouel
in #21856.

使用 update() 来更新 LDAP 入口,在很多场景下很慢。这就是为何在 Symfony 4.1 中有两个名为 addAttributeValues()removeAttributeValues() 的方法来对 multi-valued attribute(多值属性)进行值的添加和删除:

1
2
3
4
5
6
7
8
9
use Symfony\Component\Ldap\Ldap;
 use Symfony\Component\Ldap\Entry;
 // ...
 
$entry = $ldap->query('...', '...')->execute()[0];
 
$entityManager = $ldap->getEntryManager();
$entityManager->addAttributeValues($entry, 'telephoneNumber', ['+1.111.222.3333', '+1.222.333.4444']);
$entityManager->removeAttributeValues($entry, 'telephoneNumber', ['+1.111.222.3333', '+1.222.333.4444']);

重定向后保持 query string

Contributed by
Hamza Amrouche
in #26281.

在 Symfony 4.1 中,路由( YAML, XML 或 PHP) 可以定义一个全新的名为 keepQueryParams 的选项。默认是它的值是 false,但如果被设为 true,query parameters (如果有) 将被添加到重定向的 URL 中去:

1
2
3
4
5
6
7
legacy_search:
    path: /search-engine
    controller: Symfony\Bundle\FrameworkBundle\Controller\RedirectController::redirectAction
    defaults:
        route: search
        permanent: true
        keepQueryParams: true

本例中,如果原始链接是 /search-engine?q=symfony,程序将重定向到 /search?q=symfony

在 PropertyInfo 中添加了对 hasser accessors 的支持

PropertyInfo组件 通过使用不同类型的元数据,可以感知类中的属性。在 Symfony 4.1 中,组件中的一个资源 (也就是 ReflectionExtractor 类) 添加了对 hasser 方法的支持。

这就允许,比如,通过定义类似 hasChildren() 这种方法而不是 getChildren(),来让某个属性可读。