ความถูกต้องใน Symfony ในการกรอกแบบฟอร์มในสองขั้นตอนคืออะไร?

Hy,

ความถูกต้องใน Symfony ในการกรอกแบบฟอร์มในสองขั้นตอนคืออะไร? ลองนึกภาพว่าเรามีเอนทิตีที่เรียกว่า Enterprise และเราต้องการสร้างแบบฟอร์มที่มีเฉพาะฟิลด์ที่จำเป็นและแบบฟอร์มอื่น ซึ่งเมื่อผู้ใช้เข้าสู่ระบบสามารถกรอกข้อมูลในฟิลด์อื่นๆ ที่ไม่จำเป็นได้

แบบฟอร์มความถูกต้องเป็นอย่างไร? ตอนนี้ฉันมีแบบฟอร์มสำหรับการลงทะเบียน ('lib/form/doctrine/EnterpriseForm.class.php') และแบบฟอร์มอื่น ('lib/form/doctrine/EnterpriseCompleteForm.class.php') ในทุกคลาสเราตั้งค่าป้ายกำกับ เครื่องมือตรวจสอบ . ..แต่ปัญหาอยู่ในรูปแบบที่สอง เมื่อฉันพยายามส่ง มันทำให้ฉันมีข้อผิดพลาดเนื่องจากฉันไม่ได้โพสต์ฟิลด์บังคับที่กำหนดไว้ในโมเดล ฉันจะทำเช่นนั้นได้อย่างไร? วิธีนั้นถูกต้องหรือไม่? ฉันจะแก้ไขปัญหานี้ได้อย่างไร?

ขอบคุณ.


person nebur85    schedule 06.01.2010    source แหล่งที่มา


คำตอบ (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'); 
}

สำหรับข้อผิดพลาดของคีย์ซ้ำ ให้ตรวจสอบคำจำกัดความของฐานข้อมูลของคุณว่าคีย์หลักของตารางนี้เพิ่มขึ้นโดยอัตโนมัติหรือไม่

person Felix Kling    schedule 06.01.2010

เฟลิกซ์ ฉัน "ยกเลิกการตั้งค่า" การเปลี่ยนแปลงและทำงานได้ดี... แต่ฉันมีปัญหา ฉันพยายามอัปเดตการกระทำเดียวกัน รหัสของฉันดูเหมือนว่า

ในการดำเนินการ

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

หากฉันพยายามทำสิ่งนี้ พวกเขาส่งคืนข้อผิดพลาด 'คีย์หลักซ้ำกัน' ให้ฉัน

person nebur85    schedule 07.01.2010
comment
คุณควรแก้ไขคำถามของคุณในครั้งต่อไป ไม่ใช่ตอบตัวเอง อย่างไรก็ตาม: นี่คือฟอร์มขั้นตอนแรกที่คุณแสดงเฉพาะช่องที่ต้องกรอกใช่ไหม เทมเพลตของคุณมีลักษณะอย่างไร Doctrine::getTable('Customer')-> find(1) ดูผิดสำหรับฉันเมื่อคุณโหลดลูกค้าด้วย ID 1 เสมอ - person Felix Kling; 07.01.2010
comment
ขออภัย Felix ครั้งต่อไปฉันจะแก้ไขคำถามของฉัน ;) ใช่ ฉันรู้ว่าโหลดเฉพาะลูกค้าที่มีรหัสเท่ากับ 1 เท่านั้น (รหัสนี้เป็นผลมาจากการทดสอบและทดสอบและทดสอบ ไม่ถูกต้องอย่างแน่นอน) ไม่ แบบฟอร์มนี้แสดงเพียงสองช่องเท่านั้น (ไม่ใช่แบบฟอร์มแรก) และในเทมเพลตของฉัน ฉันมีเพียงสองช่องและคำสั่ง showHiddenFields() ฉันเห็นรหัสที่สร้างขึ้นและมีฟิลด์รหัสลูกค้าที่มีค่า แต่ปัญหาคือเมื่อพวกเขาตรวจสอบ: พวกเขาถูกต้อง แต่ (ผ่านการตรวจสอบ) แต่พิมพ์ข้อผิดพลาด 'primary_key ซ้ำกัน' หรือคล้ายกันให้ฉัน... ขอบคุณมาก Felix - person nebur85; 08.01.2010