可以通过GET请求填充如下所示的实体类型设置吗?
当查询字符串包含正确的密钥对(?category = 232,查询字符串是表单提交的结果 - 所以配对正确)时,实体类型将不会填充,但是,如果我将类型设置为使用选择类型,则填充正常 - 我希望将其保留为实体类型。
->add('category', 'entity', array(
'required' => false,
'class' => 'AppBundle:FormElementOption',
'choices' => $this->form_repository->getOptionsForSelectEntities($this->directory->getProject()->getId()),
'choices_as_values' => true,
'choice_label'=>'label',
'choice_value'=>'id',
'group_by' => function ($currentObject) {
return $currentObject->getFormElement()->getLabel();
},
))
呈现的表单元素是:
<select id="category" name="category" class="form-control">
<option value=""></option>
<optgroup label="Car Brand">
<option value="221">6 Door</option>
<option value="222">Toyota</option>
<option value="223">Jaguar</option>
<option value="224">Skodai</option>
</optgroup>
<optgroup label="Car Doors Count">
<option value="226">6 Door</option>
<option value="227">Green</option>
</optgroup>
<optgroup label="Car Doors">
<option value="228">1 Door</option>
<option value="229">2 Door</option>
<option value="230">3 Door</option>
<option value="231">4 Door</option>
<option value="232">6 Door</option>
</optgroup>
</select>
答案 0 :(得分:1)
当然可以,但您需要在表单类型“外部”进行更多配置。此方法非常适合“过滤/搜索”表单类型,但应避免创建资源/实体。
每当你创建一个FormType实例时,你给它命名,比如“搜索”,表单将查看名为'search [category]'的参数的请求参数。
要使用“无名”表单类型,您应该在控制器中使用另一种语法来创建表单,即:
$form = $this->get('form.factory')->createNamed(null, new SearchType(), $search);
第一个null
表示没有名字。
此外,请确保将表单选项_method
设置为get
,以便在查询字符串内搜索数据,而不是请求正文(即_POST
)。