Apa yang benar di symfony untuk mengisi formulir dalam dua langkah?

Hy,

Apa yang benar di symfony untuk mengisi formulir dalam dua langkah? Bayangkan kita memiliki entitas bernama Perusahaan dan kita ingin membuat formulir dengan hanya bidang yang wajib diisi dan formulir lain, sehingga ketika pengguna login dapat mengisi bidang lain yang tidak wajib diisi.

Bagaimana bentuk kebenarannya? Sekarang saya memiliki formulir untuk pendaftaran ('lib/form/doctrine/EnterpriseForm.class.php') dan lainnya ('lib/form/doctrine/EnterpriseCompleteForm.class.php'). Di setiap kelas kami menetapkan label, validator, . ..tapi masalahnya ada pada bentuk kedua. Ketika saya mencoba mengirimkannya, saya mendapat kesalahan karena saya belum memposting bidang wajib yang ditentukan dalam model. Bagaimana saya bisa melakukan itu? Apakah cara tersebut benar? Bagaimana cara memperbaikinya?

terima kasih.


person nebur85    schedule 06.01.2010    source sumber


Jawaban (2)


Anda harus menghapus setiap bidang formulir yang tidak diperlukan di formulir kedua (tentu saja Anda harus menyimpan bidang tersembunyi dengan ID catatan).
Pada dasarnya Anda cukup memperbarui catatan dengan formulir kedua sehingga setiap bidang yang diperlukan di database Anda sudah sebagai sebuah nilai.

Akan membantu jika Anda memposting kode formulir kedua.

Jadi ringkasannya pendekatan Anda valid (mungkin ada cara yang lebih baik saya tidak tahu), pastikan saja kode Anda benar.


Sunting:

Jadi, jika saya memahami Anda dengan benar maka formulir yang Anda gunakan dalam kode Anda akan memperbarui objek yang ada. Anda harus meneruskan objek ini ke formulir yang mengetahui, bahwa objek tersebut sudah ada dan dapat memvalidasi nilainya:

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'); 
}

Untuk kesalahan kunci duplikat, periksa definisi database Anda apakah kunci utama tabel ini bertambah secara otomatis.

person Felix Kling    schedule 06.01.2010

Baiklah Felix, saya melakukan perubahan "tidak disetel" dan berfungsi dengan baik... tetapi saya punya masalah. Saya mencoba melakukan pembaruan pada tindakan yang sama. Kode saya terlihat seperti itu.

dalam tindakan

 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);
    }   
  }

di mana kode processRegisterForm berada :

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);
    }
  }

jika saya mencoba melakukan ini, mereka mengembalikan saya kesalahan 'duplikat kunci utama'.

person nebur85    schedule 07.01.2010
comment
Anda harus mengedit pertanyaan Anda lain kali, bukan menjawab sendiri. Bagaimanapun: Ini adalah langkah pertama di mana Anda hanya menampilkan bidang yang wajib diisi, bukan? Bagaimana tampilan template Anda? Doctrine::getTable('Customer')-> find(1) menurut saya terlihat salah karena Anda selalu memuat pelanggan dengan ID 1. - person Felix Kling; 07.01.2010
comment
Maaf Felix, lain kali saya akan mengedit pertanyaan saya ;) Ya, saya tahu bahwa hanya memuat pelanggan yang kodenya sama dengan 1 (kode ini adalah hasil tes dan tes dan tes, pasti tidak benar). Tidak, formulir ini hanya menampilkan dua bidang (bukan formulir pertama) dan di templat saya, saya hanya memiliki dua bidang dan pernyataan showHiddenFields(). Saya melihat kode dihasilkan dan ada bidang kode pelanggan dengan nilai tetapi masalahnya adalah ketika mereka memvalidasi: mereka melakukannya dengan benar tetapi (lulus validasi) tetapi mencetak kesalahan 'primary_key duplikat' atau serupa... terima kasih banyak Felix. - person nebur85; 08.01.2010