我使用此代码制作表单:
$builder
->add('person','entity',array(
'class'=>'MyBundle:Person',
'multiple' => true,
'empty_value' => 'None',
'required'=>false,
'mapped'=>false));
结果我得到了这个HTML:
<select id="mybundle_person_person" multiple="multiple" name="mybundle_person[person][]">
<option value="1">Surname1</option>
<option value="5">Surname2</option>
<option value="6">Surname3</option>
<option value="11">Surname4</option>
<option value="19">Surname5</option>
</select>
这里,值&#34;选项值&#34; (1,5,6,11,19)对应于数据字段&#34; Id&#34;来自表格(来自实体)&#34; Person&#34;。
但是没关系。
在Controller中处理表单时,我希望获得所选项目的这些选项的svalues。 例如,选择了项目&#34; Surname2&#34;,&#34; Surname3&#34;,&#34; Surname5&#34;我想获得价值观&#34; 2&#34;,&#34; 6&#34;,&#34; 19&#34;。 我的问题是如何做到这一点?
如果我使用此代码
if ($form->isValid()) {
$per = $form->get('person')->getData();
$logger=$this->get('logger');
foreach($per as $key => $value){
$logger->info('person: key='.$key.' value='.$value);
}
变量$ key中的获取订单号0,1,2,...(数组索引)。 但这不是我需要的。
答案 0 :(得分:1)
如果您使用entity
创建了表单,而person字段是YourEntity
的映射属性,如
$form = $this->createFormBuilder(new YourEntity());
然后你可以简单地调用你的财产的吸气剂,如
if ($form->isValid()) {
$persons=$form->getData()->getPerson();
echo '<pre>';print_r($persons);echo '</pre>';
}
如果您的表单未通过实体进行映射,那么您可以从
中获取所有请求if ($form->isValid()) {
$requestAll = $this->getRequest()->request->all();
$persons = $requestAll['mybundle_person']['person'];
echo '<pre>';print_r($persons);echo '</pre>';
}
答案 1 :(得分:0)
通过这一行$ per = $ form-&gt; get('person') - &gt; getData();检索人员对象列表而不是索引数组
所以在你的循环中只需要$ logger-&gt; info('person:key ='。 $ value-&gt; getId()。'value ='。$ value);