簡體   English   中英

刪除Zend \\ Form \\ Collection的所有元素(帶有DoctrineModule ObjectSelect的字段集)

[英]Deleting all elements of a Zend\Form\Collection (Fieldset with a DoctrineModule ObjectSelect)

我正在使用ZF2應用程序,該應用程序使用ZF2表單以及DoctrineModule水化器在簡單的CRUD系統中創建/更新實體。 實體(聯盟)與另一個實體(團隊)具有Doctrine OneToMany關聯,並且該關聯由表單站點上的Zend\\Form\\Element\\Collection 當創建新實體或使用該表單更新現有實體時,一切正常,除了以下一種情況:清空現有實體的關聯集合。 當我刪除集合中的所有元素並單擊“保存”時,表單將彈回,並且集合中的每個現有元素都顯示錯誤Value is required and can't be empty

顯示問題的視頻:http: //youtu.be/3ucRb6X61c8

碼:

看來問題歸結為InputFilter,但我似乎無法確切地找出問題所在。 最多可以刪除集合的N個條目中的(N-1)個,因此InputFilter結構本身不是問題。 或許當張貼的集合為空, Zend\\Form不刪除分配到的每個元素現有NotEmpty驗證teams集合?

為Union字段集提供了一個自定義輸入過濾器( 請參閱此處 ),但是teams collection元素沒有列出輸入。 我也嘗試過完全刪除自定義InputFilter並為teams集合添加合適的InputFilter定義,但是最終結果是相同的。

外面有人對我在這里做錯的事情有任何見解嗎?

為了解決這個問題,我更新了接收表單POST的控制器,以檢測何時已從客戶端清空集合,並手動清空實體上的集合:

if ( !isset($data['union']['teams']) || empty($data['union']['teams']) ) {
    $entity->removeTeams($entity->getTeams());
}

嘗試讓您的TeamFieldset實現Zend\\InputFilter\\InputFilterProviderInterface ,然后將以下方法添加到TeamFieldset

public function getInputFilterSpecification()
{
    return array(
        'id' => array(
            'required' => false,
        )
    );
}

修改后的TeamFieldsethttps : TeamFieldset

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM