Choice Type是Symfony表单系统中威力最大的一个,它可以用来创建下拉列表、单选框或复选框。在Symfony 3.2中,我们为它新增了一个全新功能以改善性能:lazy loading the choice values(选项值的懒加载)。

首先,要为ChoiceType定义choice_loader选项,使用全新的CallbackChoiceLoader类来设置PHP回调(callable),该回调在取得选项列表时被执行:

1
2
3
4
5
6
7
8
use Symfony\Component\Form\ChoiceList\Loader\CallbackChoiceLoader;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
 
$builder->add('constants', ChoiceType::class, [
    'choice_loader' => new CallbackChoiceLoader(function() {
            return StaticClass::getConstants();
    },
]);

CallableChoiceLoader类实现的是ChoiceLoaderInterface接口,该接口同样被每一个ChoiceType的子类型(subtype)所实现,比如CountryTypeCurrencyTypeLaguageTypeLocalTypeTimezonType等。