来自GET的Symfony2.7实体类型填充


Symfony2.7 entity type population from GET

是否可以通过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>

当然可以,但您需要在表单类型的"外部"进行更多配置。此方法非常适合"筛选/搜索"表单类型,但在创建资源/实体时应避免使用。

无论何时创建FormType实例,只要给它一个名称,比如"search",表单就会查看名为"search[category]"的参数的请求参数。

要使用"无名称"表单类型,您应该在控制器中使用另一种创建表单的语法,即:

$form = $this->get('form.factory')->createNamed(null, new SearchType(), $search);

第一个null表示没有名字。

此外,请确保表单选项_method设置为get,以便在查询字符串中搜索数据,而不是在请求体(即_POST)中搜索数据。