我試過服務解決方案,並得到它的工作。我不確定它是否是最優雅或有效的方式,但它完成了這項工作。該表單是一種表單類類型,我注入了一個包含選擇數組的服務。
我在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'),
))
然後我創建了一個自定義的樹枝過濾器函數,其中的選擇服務注入到它。
/*twigExtension.php*/
public function renderChoicesFilter($value, $type)
{
$choices = $this->choicesService->getChoices($type);
return array_search($value, $choices);
}
/*twig template*/
{{ object.paymentFrequency|renderChoices('paymentFrequency') }}
當提交表單時,我將對象存儲到一個會話變量,我可以通過轉儲看到()的會話變量的是#fullPayment:「2周」,#compounding:「每天」都被保存價值不是關鍵。這是與選擇陣列('月'=>'1月','雙週'=>'2周')等 – raupie
你是對的。我檢查了文檔,它在最近的版本中已被更改:http://symfony.com/doc/2.8/reference/forms/types/choice.html#choices-as-values –