来自GET的Symfony2.7实体类型人口

时间:2015-11-04 11:56:48

标签: php forms symfony doctrine-orm

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

1 个答案:

答案 0 :(得分:1)

当然可以,但您需要在表单类型“外部”进行更多配置。此方法非常适合“过滤/搜索”表单类型,但应避免创建资源/实体。

每当你创建一个FormType实例时,你给它命名,比如“搜索”,表单将查看名为'search [category]'的参数的请求参数。

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

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

第一个null表示没有名字。

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