我尝试了服务解决方案并使其正常工作。我不确定这是否是最优雅或最有效的方式,但它确实完成了工作。该表单是一个表单类类型,我注入了一个包含选择数组的服务。
我在 FormType 文件旁边的 Form 文件夹中创建了一个choices.php 类文件。它充当服务,将选择返回给我创建的 formType 和自定义树枝扩展过滤器。为了注入选择服务,我必须将 formType 设置为服务。
/*choices.php*/
public function getChoices($choice)
{
$choices = array('paymentFrequency' => array('Monthly' => '1month',
'Bi-weekly' => '2weeks'),
'compounding' => array('Monthly' => 'monthly',
'Daily' => 'daily')
);
return $choices[$choice];
}
/*formType.php*/
->add('paymentFrequency', ChoiceType::class, array(
'label' => 'Payment Frequency:',
'choices' => $this->choicesService->getChoices('paymentFrequency'),
))
->add('compounding', ChoiceType::class, array(
'label' => 'Compounding:',
'choices' => $this->choicesService->getChoices('compounding'),
))
然后我创建了一个自定义 twig 过滤器函数,其中将选择服务注入其中。
/*twigExtension.php*/
public function renderChoicesFilter($value, $type)
{
$choices = $this->choicesService->getChoices($type);
return array_search($value, $choices);
}
/*twig template*/
{{ object.paymentFrequency|renderChoices('paymentFrequency') }}