Điểm:0

Làm cách nào để truy xuất các giá trị #tree bên trong một biểu mẫu?

lá cờ cn

Tôi mới sử dụng Drupal 8 và tôi đang tạo một mô-đun có dạng #tree.Tôi đã chọn biểu mẫu #tree để tạo nhiều biểu mẫu có cùng trường văn bản và nút.

Tôi đã xem qua một tài liệu trong drupal về #tree.
https://www.drupal.org/docs/7/api/form-api/tree-and-parents
Tôi đã thực hiện một nghiên cứu về nó và không thể tìm thấy bất kỳ tài liệu, bài đăng hoặc blog nào về cách lấy một giá trị cụ thể từ #tree.

Tôi đã triển khai #tree trong biểu mẫu của mình. Vấn đề duy nhất là tôi không thể truy xuất một giá trị cụ thể từ biểu mẫu.

for($count = 0; $count < $rowCount; $counter++){
   $form['firstname']['#tree'] = TRUE;
   $form['firstname'] => [
        '#type' => 'trường văn bản',
        '#title' => 'Tên',
   ];
   $form['tên thứ hai'] => [
        '#type' => 'trường văn bản',
        '#title' => 'Tên thứ hai',
   ];
   $form['save'] => [
        '#type' => 'gửi',
        '#value' => $this->t('Save'),
        '#submit' => ['::submitForm'],
   ];
}

rowCount liên quan đến hàng trong cơ sở dữ liệu của tôi. Quá trình này là lấy tên và họ từ người dùng và các biến đó sẽ được lưu trong cơ sở dữ liệu.

Làm cách nào tôi có thể lấy tên thứ 2 bên trong biểu mẫu #tree?

Điểm:0
lá cờ cn

#cây biểu thị một hệ thống phân cấp trong biểu mẫu, bạn vẫn cần PHP hợp lệ và hợp lý để làm cho nó hoạt động, ví dụ:.

// Trong quá trình xây dựng...
$form['parent'] = [
  '#type' => 'thùng chứa',
  '#cây' => ĐÚNG,
];

for($count = 0; $count < $rowCount; $counter++){
  $form['parent'][$counter] = [
    'tên' => ['#type' => 'đầu vào', ...],
    'họ' => ['#type' => 'đầu vào', ...],
  ];
}

// Trong lần gửi...
// '0' là khóa bạn đã đặt với $counter trước đó.
$first_firstname = $form_state->getValue('parent')[0]['firstname'];
$first_lastname = $form_state->getValue('parent')[0]['lastname'];
Jeirod avatar
lá cờ cn
Cảm ơn bạn đã làm rõ. Lần đầu tiên tôi đọc bài báo trong Drupal, tôi đã nghĩ rằng `#tree` là một loại biểu mẫu trong Drupal. Tôi cũng có thể thay đổi 0 theo nút mà người dùng đã nhấp vào không? Giả sử người dùng đã nhấp vào nút gửi thứ 2. Có thể đặt một trường ẩn chứa số lượng bộ đếm được chuyển vào hàm `submit` không?
lá cờ cn
Bạn cần đặt `#name` duy nhất cho mỗi nút và kiểm tra `$form_state-> getTriggeringElement()` trong trình xử lý gửi
Jeirod avatar
lá cờ cn
Cảm ơn bạn đã trả lời. Tôi cũng có một câu hỏi khác. tôi đã tạo ra một cái khác 2 container bên trong container mẹ. Tôi thêm các thùng chứa cho các bộ phận. Tôi có thể truy cập giá trị như `$first_firstname = $form_state->getValue('parent')[0]['secondContainer']['thirdContainer']['firstname'];` không? Tôi đã thử điều này trong mã của mình và nó báo chỉ mục không xác định: tên.
Điểm:0
lá cờ de

#cây Tạo một hệ thống phân cấp các giá trị trong trình xử lý gửi biểu mẫu.

So sánh:

chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {
  $form['thùng chứa'] = [
    '#type' => 'thùng chứa',
  ];
  $form['container']['some_value'] = [
    '#type' = >'trường văn bản',
  ];

  // Các nút gửi, v.v. không được hiển thị

  trả về biểu mẫu $;
}

Điều này sẽ tạo ra một phần tử biểu mẫu. Sau khi nhấp vào gửi, khóa của thành phần biểu mẫu được sử dụng để trả về giá trị. trong trường hợp này, chìa khóa là some_value, nghĩa là trình xử lý xác thực và gửi có thể truy xuất giá trị đã gửi với form_state->getValue('some_value').

Bây giờ, thêm #cây đến thùng chứa:

chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {
  $form['container'] = [
    '#type' => 'thùng chứa',
    '#cây' => ĐÚNG,
  ];
  $form['container']['some_value'] = [
    '#type' = >'trường văn bản',
  ];

  // Các nút gửi, v.v. không được hiển thị

  trả về biểu mẫu $;
}

Với sự thay đổi này, $form_state->getValue('some_value') sẽ không trả lại gì, vì giá trị bây giờ là một phần của phần tử vùng chứa (phần #cây phần tử) và cần được truy xuất liên quan đến phần tử đó:

// Trả về một mảng với một khóa duy nhất, 'some_value', chứa giá trị
// giá trị đã gửi.
$form_state->getValue('container')

// Trả về giá trị đã gửi:
$form_state->getValue(['container', 'some_value'])
Jeirod avatar
lá cờ cn
Cảm ơn bạn đã cung cấp thông tin bổ sung. Tôi đang sử dụng vòng lặp có nhiều nút gửi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.