drupal 8 용 사용자 정의 웹 양식 핸들러 플러그인 작성
이 문서는 이미 webform 및 webform-ui를 설치하고 활성화했다고 가정합니다.
1) 웹 양식을 작성하십시오. -구조-> 웹 양식으로 이동하여 "+ 웹 양식 추가"버튼을 누르십시오. -당신은 UI를 사용하거나 yaml을 사용할 수 있습니다, 그것은 당신에게 달려 있습니다. 이메일 주소를받는 하나의 필드 양식에 대한 yaml 예 :
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
들여 쓰기는 yaml에 중요하므로 올바르게 가져와야합니다. 들여 쓰기는 공백입니다.
이제 양식을 저장하십시오.
2) 웹 폼 핸들러 플러그인 만들기
다음으로 웹 양식을 편집 할 때 "이메일 / 핸들러"섹션에 나타날 새로운 플러그인을 만들 수 있습니다. myhandler라고 부르겠습니다. myhandler에 대한 모든 언급을 선택한 이름으로 바꾸면 원하는대로 부를 수 있습니다.
a) 플러그인의 새 폴더를 만들고 다음 하위 폴더의 drupal 루트 (여기서는 / var / www / html /)에서 수행하십시오. / var / www / html / modules / Custom / myhandler
b)이 파일에서 위의 myhandler.info.yml 디렉토리에 새 파일을 만듭니다.
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) 모듈 디렉토리에 src 디렉토리를 작성하십시오. 예 : / var / www / html / modules / Custom / myhandler / src in src create 플러그인의 플러그인 작성 WebformHandler
(이것은 한 번에 사용하여 달성 할 수 있습니다.
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
-p 플래그를 mkdir에 사용하여 전체 구조를 한 번에 만듭니다.)
4) 새 파일 만들기 /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
해당 파일에서 다음 PHP 코드로 이동합니다. 필요한 경우 플러그인을 구성하는 방법을 볼 수 있도록 구성 양식 설정을 그대로 두었습니다.
<?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) MyHandler 모듈 (drush 또는 extend 메뉴 사용)을 활성화 한 다음 drupal 캐시를 다시 빌드하십시오 (drushal 루트 아래의 아무 곳에서나 "drush cr"(/ var / www / html 여기에서 drush를 사용하는 경우))
6) 웹 양식을 편집하고 "이메일 / 핸들러"로 이동 한 후 "+ 핸들러 추가"버튼을 클릭하십시오. 플러그인이 표시되면 핸들러 추가를 클릭하면 제출 URL을 묻는 상자가 나타납니다. 저장 버튼을 클릭하십시오. 무언가가 제대로 보이지 않거나 작동하지 않으면 아파치 오류 로그를 확인하면 도움이 될 수 있습니다.
7) 양식을 테스트하십시오-양식을 제출 한 다음 감시 로그 (drush ws)를 확인하면 전송 된 값이 표시됩니다. 그들은 당신이 보는 출력에서 잘릴 수 있습니다, 당황하지 마십시오. 지금 당신이하는 일은 당신에게 달려 있습니다.
이것이 누군가를 돕기를 바랍니다. 나는 그 장소에서 찾은 것들과 함께 그것을 묶어서 하나의 문서에 썼습니다. 나를 여기 데려온 다른 사람들에게 감사합니다.
hook_form_alter()
. 또한 어떤 양식을 변경하려고하는지 말해야합니다.