我在symfony中创建了一个表单对象,用于处理api请求。它通过以下方式在控制器中创建:
$myForm = new MyFormType($foo, $bar);
$form = $this->createForm($myForm, $entity, array('method' => 'POST', 'csrf_protection' => false));
创建这些对象后,我将它们传递给外部服务,该服务将api数据转换为表单要使用的数据,如下所示:
//I pass this in, so that, our api users don't have to pass in
//{uglyAPIVariable45: 721}, but rather {pretty_variable: "go left"}
$goodData = $this->convertOldData($form->getBuilderDataCopy(), $oldData);
此服务所做的一件事是,如果表单有选择,如select标签,它会尝试将传递给api的任何字符串转换为select标记中的值。这样,如果用户可以通过" East"如果选择字段有选项"北","西","南"和"东"与值0,4,5和10相关联,转换器应返回10.用户不必传递其中一个随机值,它们只能传递字符串。如果他们过去了#Foo",它会返回一个错误以及他们可以传递的好选择的描述。
我的问题是,在制作中,我无法获得这些价值观。
在开发过程中,我发现我可以使用
获取选项foreach($formBuilderDataCopy as $formElement){
$options = $formElement->getAttributes()['data_collector/passed_options']['choices'];
}
但是当我们转向生产时,这段代码就破了。方法getAttributes突然返回null。不可否认,开始时似乎有些笨拙,所以我想找到一种更有效的方法来获得这些选择,甚至可能让我绕过不同的方法来选择','实体&# 39;,' timezone'等。人
不幸的是,查看源代码并使用get_class_methods和朋友进行探索并没有为我提供解决方案。即使我得到了选择,我能得到的最多的是值,但不是选择框中的字符串选项。
从我的交响乐形式中获取此类信息的适当方法是什么?
作为旁注,我也尝试过:
$form->get('elementName')->getConfig()->getOption('choices');
但它也只返回单个数字的ID列表,而不是替换这些数字的字符串。 e.g。
{3: 0, 5: 1, 10: 2, 11: 3...}
答案 0 :(得分:0)
为表单类型创建实体Object。然后,您可以将数据用作对象。它绝不是一个学说实体。