2010-01-06 34 views
0

Hy,symfony中的兩個步驟填寫表單的正確性如何?

symfony中填寫表單的兩個步驟是正確的嗎?想象一下,我們有一個名爲Enterprise的實體,我們想創建一個只有必填字段和另一個表單的表單,當用戶登錄時可以填寫其他非必填字段。

正確性形式如何?現在我有一個註冊表單('lib/form/doctrine/EnterpriseForm.class.php')和另一個表單('lib/form/doctrine/EnterpriseCompleteForm.class.php')。 ..但問題在於第二種形式。當我嘗試提交它時會給我一個錯誤,因爲我沒有在模型中定義需要的字段。我怎樣才能做到這一點?那是正確的嗎?我怎樣才能解決這個問題?

謝謝。

回答

-4

菲利克斯,我做它「未設置」的變化,它工作正常......但我有一個問題。我嘗試在相同的操作上進行更新。我的代碼看起來像那樣。

在行動

public function executeStepOne(sfWebRequest $request){ 
    $this->form = new CustomerFormStepOne(); 

    if ($request->isMethod(sfRequest::POST)){ 
     $this->processRegisterForm($request, $this->form,'paso2'); 

    }else{ 
     $this->customer = Doctrine::getTable('Customer')-> find(1); 
       $this->forward404Unless($this->customer); 
    } 
    } 

其中processRegisterForm代碼:

protected function processRegisterForm(sfWebRequest $request, sfForm $form,$route) 
    { 
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));  
    if ($form->isValid()) 
    { 
     $customer = $form->save(); 
     $this->redirect('customer/'.$route); 
    } 
    } 

,如果我嘗試這樣做,他們將返回我一個錯誤 '的主鍵複製'。

+3

您應該在下次編輯您的問題,而不是回答自己。無論如何:這是您只顯示必填字段的第一個步驟,對不對?你的模板是怎樣的? 'Doctrine :: getTable('Customer') - > find(1)'對我來說看起來不對,因爲你總是加載ID爲1的客戶。 – 2010-01-07 16:15:18

+0

對不起菲利克斯,下一次我將編輯我的問題;) 是的,我知道只在代碼等於1的地方加載客戶(這個代碼是測試和測試結果,測試結果肯定是不正確的)。不,這個表單只顯示兩個字段(不是第一種形式),在我的模板中,我只有兩個字段和showHiddenFields()語句。我看到代碼生成,並有客戶代碼字段的值,但問題是,當他們驗證:他們確實正確,但(通過驗證),但打印我錯誤'primary_key重複'或類似...非常感謝菲利克斯。 – nebur85 2010-01-08 11:13:53

+0

看到我編輯的答案... – 2010-01-08 12:02:10

2

你應該在第二種形式中取消設置每個不需要的表單字段(當然你應該保留一個帶有記錄ID的隱藏字段)。
基本上,你只需要用第二種形式更新記錄,以便數據庫中的每個必填字段都作爲一個值。

這將有助於您發佈第二種形式的代碼。

所以總之你的方法是有效的(也許有更好的方法我不知道),只要確保你的代碼是正確的。


編輯:

所以,如果我正確地給你,那麼你在代碼中使用的形式更新現有的對象。到形式都知道你應該通過這個對象,該對象已經存在,並且可以相應驗證值:

public function executeStepOne(sfWebRequest $request){ 
    $this->customer = Doctrine::getTable('Customer')->find(1); 
    $this->forward404Unless($this->customer); 

    $this->form = new CustomerFormStepOne($this->customer); 

    if ($request->isMethod(sfRequest::POST)){ 
     $this->processRegisterForm($request, $this->form,'paso2'); 
} 

對於重複鍵錯誤,請檢查您的數據庫定義,如果該表的主鍵就會自動增加。