2014-10-22 101 views
0

我正在嘗試使用select2作爲我的symfony2 entity fieldsSymfony2 - 自定義表單呈現驗證錯誤

我爲它創建了實體字段,樹枝模板和模型轉換器的擴展。渲染工作得很好,但是我在提交字段時遇到問題。

與原點格式,該值發送這樣的:

Content-Disposition: form-data; name="com_bundle_book[series]" 1 

而對於一個實體與多個S

Content-Disposition: form-data; name="com_bundle_book[author][]" 1 
Content-Disposition: form-data; name="com_bundle_book[author][]" 3 

選擇2的行爲是一個隱藏字段,以取代現有的場地。發送的數據看起來像這樣:

Content-Disposition: form-data; name="com_bundle_book[series]" TraLiRo 
Content-Disposition: form-data; name="com_bundle_book[author][]" Ferdinand,Hans 

我希望與modelTransformer排序了這一點,而是我得到一個錯誤(無效值)這兩個領域,而modelTransformer永遠不會被調用。

我試着用實體的擴展和擴展實體本身。我的服務:

com_bundle.tag_type_extension: 
    class: ...\Form\Extension\TagTypeExtension 
    tags: 
     - { name: form.type_extension, alias: entity } 
    arguments: [@doctrine.orm.entity_manager] 
com_bundle.form.type.tagType_entity: 
    class: ...\Form\Extension\TagTypeExtension2 
    tags: 
     - { name: form.type, alias: tagType_entity } 
    arguments: [@doctrine.orm.entity_manager] 

的類:

我該如何解決這個問題?

更新

形式是建立這樣的:

$builder 
     ->add('author', 
      'entity', 
      array(
       'select2' => true, 
       'multiple' => true, 
       'class' => 'Bundle:Author', 
       'property' => 'name' 
      ) 
     ) 
+0

你應該張貼您的Transformer代碼,您嘗試激活它的行。 – AlterPHP 2014-10-22 12:11:31

+0

@AlterPHP絕對,我希望這有幫助。自從一個星期以來一直卡在... – Patrick 2014-10-22 12:31:50

回答

1

你的變壓器不應該返回對象,但對象的ID,默認實體ModelTransformer仍然適用,並會改變這些ID添加到對象。

該原則實體模型轉換器適用於你的之前,這就是爲什麼你永遠不會達到它。添加它作爲一個ViewTransformer這樣的:

$builder->addViewTransformer(
    new ObjectListToStringTransformer(
     $this->em, 
     [ 
      'class' => $options['class'], 
      'property' => $options['property'], 
      'delimiter' => ',' 
     ] 
    ), true 
); 

我加了TRUE作爲addViewTransformer =的第二個參數>它迫使你的變壓器前面加上相比於母公司字段類型定義其他的。

編輯:這樣你就必須去適應你的變壓器變換()方法,因爲它現在將收到的ID陣列,而不是對象數組...

+0

謝謝,這將光線帶入黑暗。但我的轉換和reverseTransform方法仍然沒有被稱爲**。爲什麼? – Patrick 2014-10-22 13:56:26

+0

因此,請不要通過刪除參數「true」來預佔ViewTransformer。 – AlterPHP 2014-10-22 14:03:01

+0

請顯示構建窗體本身的代碼。 – AlterPHP 2014-10-22 14:04:05