我有一个带有几个ChoiceType字段的表单类,这些字段包含一个带有键:值对的选项数组。提交表单后,将保存该值。但是,当我渲染对象时,我希望显示Key值。
示例:'每月' => '1个月&#39 ;.存储1个月,更喜欢输出为每月。
我试图避免条件检查值并将输出更改为键值。
我无法找到有关此类事情的最佳做法的任何文档。我正在考虑创建一个存储所有选项数组的服务,并构建一个twig过滤器,用于根据服务中的数组更改呈现的输出。
我是在正确的轨道上还是有更简单的方法?
答案 0 :(得分:0)
您可以创建枚举器类并在模板中使用它,如下所示:
class MyChoicesEnum {
private static $choices = array(
'Monthly' => '1month',
'Quarterly' => '4month',
// etc...
);
public static function choices() {
return self::$choices;
}
}
然后将类方法结果传递给返回数组中的模板:
...
'form' => $form->createView()
'my_choices' => MyChoicesEnum::choices()
在树枝上:
{{ my_choices.key }}
答案 1 :(得分:0)
我尝试了服务解决方案并使其正常运行。我不确定它是否是最优雅或最有效的方式,但它完成了这项工作。表单是一个表单类型,我注入了一个包含选择数组的服务。
我在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') }}