ฉันจะส่งพารามิเตอร์ไปยังตัวสร้างฟอร์มได้อย่างไร


15

ฉันมีเส้นทางต่อไปนี้ใน module_name.routing.yml

module_name.usergroup_delete:
  path: 'module_name/usergroup/delete/{arg1}'
  defaults:
    _form: '\Drupal\module_name\Form\DeleteUserGroup'
    _title: 'Delete User group'
  requirements:
    _permission: 'access admin menus'

นี่คือรหัสใน module_name / src / Form / DeleteUserGroup.php

namespace Drupal\module_name\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

class DeleteUserGroup extends ConfigFormBase {

  public function getFormId() {
    return 'delete_user_group';
  }
/**
 * General form for switching all nodes from one user to another.
 */
  public function buildForm(array $form, FormStateInterface $form_state,$product_code) {
  $form['_product'] = array(
        '#type' => 'value',
        '#value' => $product_code,);
//get the user group and username to display the confirmation message 
$result = db_query('select field_p_group_name_value from {content_type_usergroup} ctu'       
        . ' where vid=%d',$product_code);      
    while ($row = $result->fetchObject()) {
      $user_group = $row->field_p_group_name_value;
    }

return confirm_form($form,t('Are you sure you want to delete "' .$user_group. '" User Group?'),
        isset($_GET['destination']) ? $_GET['destination'] : "function_name",t('This action cannot be undone.'),t('Delete'),t('Cancel'));

  }
/**
 * #submit callback for node_adoption_transfer_form().
 */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $form_values = $form_state->getValues();
  //if ($form_state['values']['confirm']) {
    $param = $form_state->getValue('_product');
    drupal_set_message(t('Group ' .$param.' will get deleted.'));               
    db_query('DELETE FROM {content_type_usergroup} WHERE vid = %d', $param);
    //delete the users of the usergroup too
    db_query('DELETE FROM {usergroup_user_map} WHERE group_id=%d', $param);
    drupal_set_message(t('usergroup has been deleted.'));
    drupal_goto('function_name');
  }

  protected function getEditableConfigNames() {
    return "delete_user_group";
  }

}

ฉันได้รับข้อผิดพลาดต่อไปนี้:

DeleteUserGroup :: buildForm () ต้องเข้ากันได้กับ Drupal \ Core \ Form \ FormInterface :: buildForm (อาร์เรย์ $ form, Drupal \ Core \ Form \ Form \ FormStateInterface $ form_state)

ทำไม?


ทุกคนสามารถอธิบายวิธีการนี้เท่ากับเมื่อใช้โมดูล WebForm? ฉันไม่มีโมดูลเฉพาะสำหรับฟอร์มที่ฉันสร้างโดยใช้โมดูลดังนั้นจุด '_form' จะอยู่ในไฟล์ routing.yml คืออะไร
John Cogan

คำตอบ:


28

พารามิเตอร์ต้องมีชื่อเดียวกันใน routing.yml และวิธีการสร้าง และเมื่อใช้พารามิเตอร์ในรูปแบบที่คุณต้องตั้งค่าเป็นโมฆะในรายการพารามิเตอร์:

public function buildForm(array $form, FormStateInterface $form_state, $arg1 = NULL) {

ข้อผิดพลาดร้ายแรงที่สามารถกู้คืนได้: อาร์กิวเมนต์ 2 ผ่านไปยัง db_query () ต้องเป็นอาร์เรย์ประเภทสตริงที่กำหนด
Crazyrubixfan

เมื่อพยายามใช้ arg1 ในฟังก์ชั่น
Crazyrubixfan

1
ตกลงจากนั้นปัญหาของคำถามนี้พร้อมพารามิเตอร์ในรูปแบบจะถูกแก้ไข การเรียกใช้ buildForm () สำเร็จ คุณพบปัญหาใหม่กับ db_query () ซึ่งไม่ยอมรับพารามิเตอร์สตริงจากเส้นทาง
4k4

ใช่ขอบคุณ . ปัญหาเกิดขึ้นกับ db_query กำลังจะได้รับพารามิเตอร์ตอนนี้
Crazyrubixfan

11

ขั้นแรกให้สร้างไฟล์ routing.yml

admin_notes.form:
  path: '/example_module/form/{arg}'
  defaults:
    _form: '\Drupal\example_module\Form\ExampleForm'
  requirements:
    _permission: 'access content'

จากนั้นสร้างไฟล์. php ภายใต้โครงสร้างโฟลเดอร์ /src/Form/ExampleForm.php จากนั้นสร้างฟอร์ม

public function buildForm(array $form, FormStateInterface $form_state,$arg = NULL) {

             $form['example_note'] = array(
            '#type' => 'textarea',
            '#title' => t('Block contents'),
            '#description' => t('This text will appear in the example block.'),
            '#default_value' => $arg,
        );
       $form['actions'] = ['#type' => 'actions'];
        $form['actions']['delete'] = array(
            '#type' => 'submit',
            '#value' => $this->t('Delete'),
        );

return $form;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.