2015-11-04 17 views
1

可以通過GET請求填充如下所示的實體類型設置嗎?GET的Symfony2.7實體類型人口

目前當查詢字符串包含正確的密鑰對實體類型將不填充(?類= 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

當然是可以的,但你需要的表單類型的一些配置「外」。這種方法非常適用於「過濾器/搜索」表單類型,但是要避免創建資源/實體。

每當您創建一個FormType實例時,都會爲其指定一個名稱,比如說「搜索」,表單將查找名爲'search [category]'的參數的請求參數。

要使用「無名」的形式類型,你應該在你的控制器使用替代語法創建形式,那就是:

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

第一null是指沒有名字。

此外,請確保表單選項_method設置爲get,以便在查詢字符串內而不是請求正文(即_POST)內搜索數據。

+0

我從形式:: getName返回null,這是與createNamed(null,..)相同的行爲,導致HTML中的元素之前沒有名稱?所以,而不是形式名[類別],輸出只是類別 – mr12086

+0

我認爲它可能應該,但我不會推薦它,因爲它甚至沒有記錄在'FormTypeInterface'。使用createNamed來保證安全。另外,確保'handleRequest($ request)'真的用'isSubmitted'提交表單;如果沒有,請檢查'_method'選項。 – giosh94mhz

+0

這兩種方式似乎都沒有糾正。另外,我不認爲提交表單時會出現問題,因爲表單的其餘部分工作正常,並且使用從數組構建的選擇字段工作,只是在使用實體類型時 - 我只能假設自GET沒有包含實體並僅包含它的標識。數據轉換器需要使用。但自從新的'choice_label/value'介紹,我認爲它可以使用ID填充字段?附:也是的,這是一個過濾器形式 – mr12086