Tạo một plugin xử lý biểu mẫu web tùy chỉnh cho drupal 8.
Tài liệu này giả định rằng bạn đã cài đặt và kích hoạt biểu mẫu web và webform-ui
1) Tạo biểu mẫu web của bạn. - Chuyển đến cấu trúc -> biểu mẫu web và nhấn nút "+ Thêm biểu mẫu web". - Bạn có thể sử dụng ui hoặc sử dụng yaml, tùy bạn. ví dụ yaml cho một hình thức một trường có địa chỉ email:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
Việc thụt lề rất quan trọng đối với yaml vì vậy hãy chắc chắn rằng bạn đã hiểu đúng. thụt lề là không gian.
Bây giờ lưu mẫu của bạn.
2) Tạo plugin xử lý biểu mẫu web
Tiếp theo, chúng ta có thể tạo một plugin mới sẽ hiển thị trong phần "Email / Trình xử lý" khi chỉnh sửa biểu mẫu web. Tôi sẽ gọi nó là myhandler, bạn có thể gọi nó là những gì bạn muốn, miễn là bạn thay thế tất cả các đề cập của myhandler bằng tên bạn chọn.
a) Tạo thư mục mới cho plugin của bạn, thực hiện việc này trong root drupal của bạn (được gọi ở đây là / var / www / html /) trong thư mục con sau: / var / www / html / module / Custom / myhandler
b) Tạo một tệp mới trong thư mục trên có tên myhandler.info.yml trong tệp này như sau:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Tạo thư mục src trong thư mục mô-đun của bạn, ví dụ: / var / www / html / module / Custom / myhandler / src trong src tạo Plugin trong Plugin tạo WebformHandler
(điều này có thể đạt được trong một lần sử dụng
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
sẽ làm cho toàn bộ cấu trúc trong một lần sử dụng cờ -p thành mkdir.)
4) Tạo một tập tin mới /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
trong tệp đó có mã php sau, tôi đã để lại thiết lập biểu mẫu cấu hình để bạn có thể xem cách định cấu hình plugin nếu cần.
<?php
namespace Drupal\myhandler\Plugin\WebformHandler;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\webformSubmissionInterface;
/**
* Form submission handler.
*
* @WebformHandler(
* id = "myhandler_form_handler",
* label = @Translation("MyHandler form handler"),
* category = @Translation("Form Handler"),
* description = @Translation("Do something extra with form submissions"),
* cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
* results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
* )
*/
class MyFormHandler extends WebformHandlerBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'submission_url' => 'https://api.example.org/SOME/ENDPOINT',
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['submission_url'] = [
'#type' => 'textfield',
'#title' => $this->t('Submission URL to api.example.org'),
'#description' => $this->t('The URL to post the submission data to.'),
'#default_value' => $this->configuration['submission_url'],
'#required' => TRUE,
];
return $form;
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Your code here.
// Get an array of the values from the submission.
$values = $webform_submission->getData();
// Get the URL to post the data to.
$post_url = $this->configuration['submission_url'];
$message = "MyHandler got form data:".print_r($values,1);
\Drupal::logger('myformhandler')->error($message);
return true;
}
}
?>
5) Kích hoạt mô-đun MyHandler của bạn (sử dụng menu drush hoặc mở rộng) và sau đó xây dựng lại bộ đệm drupal của bạn ("drush cr" từ bất cứ nơi nào dưới gốc drupal của bạn (/ var / www / html ở đây) sẽ làm điều đó nếu bạn sử dụng drush)
6) chỉnh sửa biểu mẫu web của bạn, đi đến "Email / Trình xử lý" và nhấp vào nút "+ Thêm trình xử lý" Bạn sẽ thấy plugin của mình được liệt kê, nhấp vào Thêm Trình xử lý, bây giờ bạn sẽ thấy một hộp yêu cầu url gửi. nhấp vào nút Lưu. Nếu một cái gì đó không đúng, hoặc nó không hoạt động, hãy kiểm tra nhật ký lỗi apache, bạn có thể tìm thấy một cái gì đó hữu ích ở đó.
7) Kiểm tra biểu mẫu của bạn - thực hiện gửi đến biểu mẫu, sau đó kiểm tra nhật ký theo dõi (drush ws), bạn sẽ thấy các giá trị được gửi đến nó. Chúng có thể bị cắt ngắn trong đầu ra mà bạn thấy, đừng hoảng sợ, tất cả đều ở đó. Những gì bạn làm với điều này bây giờ là tùy thuộc vào bạn.
Hy vọng điều này sẽ giúp được ai đó. Tôi đã ghép nó lại với nhau từ những thứ tôi tìm thấy xung quanh nơi đó và viết nó vào một tài liệu duy nhất. Cảm ơn những người khác đã đưa tôi đến đây.
hook_form_alter()
, hoặc khó hơn một chút để cho bạn biết bạn đang làm gì sai. Ngoài ra, bạn nên nói hình thức nào bạn đang cố gắng thay đổi.