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)所实现,比如CountryType
、CurrencyType
、LaguageType
、LocalType
和TimezonType
等。