Score:1

แนวทางปฏิบัติที่ดีที่สุดในการส่งผ่านพารามิเตอร์การกำหนดเส้นทางคืออะไร

ธง ae

ใน submitForm() ฉันต้องการเปลี่ยนเส้นทางไปยังตัวควบคุมและส่งค่าแบบฟอร์ม ค่าแบบฟอร์มเป็นอาร์เรย์ทั้งหมด btw

นี่คือแบบฟอร์มการส่ง

ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
    // รับค่า
    $demo_values ​​= $form_state->getValue('สาธิต');
    $data_set_value = $form_state->getValue('data_set');
    $engineering_degrees1 = $form_state->getValue('engineering_degrees1');
    $engineering_degrees2 = $form_state->getValue('engineering_degrees2');
    $engineering_degrees3 = $form_state->getValue('engineering_degrees3');
    $engineering_degrees4 = $form_state->getValue('engineering_degrees4');
    $physical_science_degrees = $form_state->getValue('กายภาพ_วิทยาศาสตร์_องศา');

   
    # ตั้งค่าข้อมูลแบบฟอร์มในการเปลี่ยนเส้นทาง URL
    $params = ['สาธิต' => $demo_values,
      'data_set' => $data_set_value,
      'engineering_degrees1' => $engineering_degrees1,
      'engineering_degrees2' => $engineering_degrees2,
      'engineering_degrees3' => $engineering_degrees3,
      'engineering_degrees4' => $engineering_degrees4,
      'physical_science_degrees' => $physical_science_degrees];
    $form_state->setRedirect('stats_degrees.render_chart',$params);
  }
}

นี่คือไฟล์ YML การกำหนดเส้นทางของฉัน

stats_degrees.render_form:
  เส้นทาง: '/statistics/stats-degrees'
  ค่าเริ่มต้น:
    _title: 'ปริญญาวิศวกรรมศาสตร์และวิทยาศาสตร์กายภาพที่ได้รับจากสมาชิกของกลุ่มที่ด้อยโอกาส'
    _form: '\Drupal\stats_degrees\Form\StatsDegreesForm'
  ความต้องการ:
      _permission: 'เข้าถึงเนื้อหา'
stats_degrees.render_chart:
  เส้นทาง: '/statistics/stats-degrees-chart/{demos}/{data_set}/{engineering_degrees1}/{engineering_degrees2}/{engineering_degrees3}/{engineering_degrees4}/{physical_science_degrees}'
  ค่าเริ่มต้น:
    _controller: '\Drupal\stats_degrees\Controller\StatsDegreesController::stats_degrees_chart'
  ความต้องการ:
    _permission: 'เข้าถึงเนื้อหา'

นี่คือการเรียกเมธอด Controller ของฉัน

สถิติฟังก์ชันสาธารณะ stats_degrees_chart($demo,$data_set,$engineering_degrees1,$engineering_degrees2,$engineering_degrees3,$engineering_degrees4,$physical_science_degrees) {

ขณะนี้เกิดข้อผิดพลาด 500 หลังจากที่ฉันส่งแบบฟอร์ม มีวิธีที่ดีกว่าในการส่งพารามิเตอร์ไปยังคอนโทรลเลอร์หรือไม่?

Jaypan avatar
de flag
ข้อผิดพลาดคืออะไร? ดูในบันทึกของคุณ
by flag
ฉันคิดว่าสิ่งที่คุณกำลังทำอยู่น่าจะได้ผล จะเกิดอะไรขึ้นหากคุณไปที่ /statistics/stats-degrees-chart/ โดยมีค่าพารามิเตอร์ใน URL คุณสามารถดีบักเพื่อดูว่า URL ใดที่ฟอร์มเปลี่ยนเส้นทางพยายามไป
Score:2
ธง cn

วิธีปฏิบัติที่ดีที่สุดในการส่งพารามิเตอร์ไปยังตัวควบคุมคือความคิดเห็นตามและขึ้นอยู่กับกรณีการใช้งาน ดังนั้นฉันจึงพยายามครอบคลุมแนวทางที่เป็นไปได้ทั้งหมด

โดยทั่วไป มีอีกสามวิธีในการส่งพารามิเตอร์ไปยังตัวควบคุม สตริงการสืบค้น ข้อมูล POST และ SESSION คุณสามารถซีเรียลไลซ์อาร์เรย์สำหรับสตริงข้อความค้นหาได้ แต่จะเป็น POST หรือ SESSION ที่ง่ายกว่า

ดู วิธีรับพารามิเตอร์ $_POST และ $_GET ในตัวควบคุม

หากคุณใช้ค่าเซสชัน ให้ยกเลิกการตั้งค่าที่ส่วนท้ายของตัวควบคุม เนื่องจากค่าเซสชันที่ไม่ต้องการอีกต่อไปจะไม่ดีสำหรับการแคช ดู ฉันจะทำลายหรือยกเลิกการตั้งค่าเซสชันได้อย่างไร.

โดยเฉพาะสำหรับแบบฟอร์มมีมากขึ้น ถ้าวัตถุประสงค์ของแบบฟอร์มคือการจัดเก็บค่าในฐานข้อมูล (อย่างถาวรในเอนทิตีหรือชั่วคราวใน tempstore) ให้ดำเนินการนี้ก่อน แล้วจึงอ้างอิงรายการฐานข้อมูลผ่านพารามิเตอร์การกำหนดเส้นทาง

หากคุณไม่ต้องการจัดเก็บข้อมูล คุณควรโพสต์ข้อมูลโดยตรงไปยังตัวควบคุม เนื่องจากคุณไม่สามารถแนบข้อมูล POST กับการส่งการเปลี่ยนเส้นทางได้

คุณไม่จำเป็นต้องมีตัวควบคุม คุณสามารถสร้างแบบฟอร์มใหม่โดยแสดงแผนภูมิด้านล่างแบบฟอร์มหรือแทนที่ ดู ฉันจะแสดงผลในหน้าเดียวกันหลังจากส่งแบบฟอร์มได้อย่างไร

Score:1
ธง fr

คุณสามารถใช้ tempstore ส่วนตัว ดูตัวอย่าง http://karimboudjema.com/en/drupal/20190315/saving-temporary-values-form-private-tempstore-drupal-8

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา