首先,讓我說,我發現sfFormPropel窗體的接口不一致。 有bind()
,它不返回任何內容,但會觸發驗證,save()
返回保存的對象,bindAndSave()
返回布爾值,實際返回值爲isValid()
。現在,我有一個工作的應用程序,但我不覺得代碼是正確的,我對symfony
很新,所以也許我錯過了一些東西。Symfony/propel窗體保存具有其他屬性的對象
我需要創建的對象需要一些外部屬性,它們不在表單中提供,它們在模型外部,由應用程序處理(例如,用戶的userId,創建實體,外部生成的guid等)。
眼下流程如下:
- 從請求獲取值並結合他們形成
- 檢查的形式是有效
- ,如果它是有效的,增加附加值,並結合他們形成一個更多的時間
- 保存表單,並返回對象
答案顯然會增加專用值從請求中檢索,但如果表單無效,則綁定特定於應用程序的值是沒有意義的,因爲它們可能會是潛在的昂貴操作,可能會創建數據庫記錄等。此外,它應該不能將這些值與帖子請求通過,它們只能來自應用程序。
現在,雖然我必須讓模型執行這些操作,但由於數據是模型外部的,因此操作仍然需要將它傳遞給模型。問題是,如果我在bind()
之後撥打$form->getObject()
,它仍然有舊數據,而沒有提交數據。
實施這種後期處理的正確方法是什麼?
二賞金開始批出其他有價值的答案
控制器有知識 - 其中一個值是當前用戶ID(可以很容易地設置爲表單),另一個是通過調用另一個模型生成和檢索的ID(我不想執行該操作呼叫是提交的表單無效),並且未來可能會添加其他模型檢索的其他值。問題是如何更新綁定對象而不觸發已處理字段的驗證? –
您是否嘗試過調用'doUpdateObject()'來獲取'綁定'對象? (見我更新的答案) –
它的工作原理和代碼現在更清潔。謝謝。 processValues()在其他情況下對我很有用。我會把問題和賞金留到星期五,其他建議也歡迎。 –