Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Drupal モジュール開発入門講座 第4回 フォーム
Search
アクイアジャパン Acquia Japan
September 21, 2022
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Drupal モジュール開発入門講座 第4回 フォーム
https://www.acquia.com/jp/events/webinars/drupal-module-development-vol4
アクイアジャパン Acquia Japan
September 21, 2022
More Decks by アクイアジャパン Acquia Japan
See All by アクイアジャパン Acquia Japan
Auth0 by OktaとDrupalで実践!認証付きアプリケーションの新しいアプローチ
acquiajp
0
240
Drupal 10.3の新機能紹介ウェビナー
acquiajp
0
290
DrupalCon Portland 2024 総まとめウェビナー
acquiajp
0
140
開発者必見!Acquia Cloud IDEで最高のDrupal開発を始めよう
acquiajp
0
250
触って学ぶ!デジタルアセット管理 Acquia DAM ハンズオンウェビナー
acquiajp
0
60
DrupalCon Lille 2023 総まとめウェビナー
acquiajp
0
120
コンテンツ設計手法で変更に強いアプリケーションを実現する〜ローコードによるWebアプリのバックエンド実装 #CNDF2023
acquiajp
0
410
DrupalCon Pittsburgh 2023 総まとめウェビナー
acquiajp
0
110
Acquia製品概要&Site Studioデモのご紹介
acquiajp
0
150
Other Decks in Programming
See All in Programming
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
670
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
190
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
iOSDC2026登壇資料.pdf
riofujimon
0
200
Security issues being discussed on Web Platforms
petamoriken
0
1.4k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.3k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
330
Are APIs Still Relevant in the AI Era?
soyuka
0
400
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
330
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
4
410
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.3k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
260
Featured
See All Featured
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Paper Plane
katiecoart
PRO
4
53k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
450
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
For a Future-Friendly Web
brad_frost
183
10k
Design in an AI World
tapps
1
340
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Transcript
ୈ4ճ ϑΥʔϜ Drupal Ϟδϡʔϧ ։ൃೖߨ࠲
Drupal Ϟδϡʔϧ։ൃೖߨ࠲γϦʔζ – DrupalͰʮϞδϡʔϧʯͱݺΕΔɺখ͞ͳιϑτΣΞΛ࣮͢Δ͜ͱͰػೳ֦ுΛ ߦ͍·͢ɻຊΣϏφʔγϦʔζͰɺDrupalͷϞδϡʔϧ։ൃʹؔ͢ΔجૅࣝΛղઆ ͠·͢ɻ – DrupalͷόοΫΤϯυपΓʹ͍ͭͯମܥతʹֶͼ͍ͨํɺࣗͰΧελϜϞδϡʔϧΛ࡞ ΕΔΑ͏ʹͳΓ͍ͨํɺΞΫΠΞೝఆσϕϩούʔࢼݧΛࢦ͢ํʹ͓͢͢ΊͰ͢ɻ –
DrupalΛҰ௨Γૢ࡞ͨ͜͠ͱ͕͋ΔํΛରͱ͍ͯ͠·͢ɻ·ͩDrupalΛ৮ͬͨ͜ͱ͕ແ ͍ํɺॳ৺ऀ͚DrupalνϡʔτϦΞϧಈըʢຊޠʣΛઌʹݟ͓ͯ͘ͱΑΓཧղ͕ਂ ·Γ·͢ɻ
ΞδΣϯμ 1. DrupalͷForm APIͱ 2. ϑΥʔϜͷछྨ 3. ϑΥʔϜΫϥεͷϝιου 4. ϑΥʔϜͷϨϯμϦϯά
5. ϑΥʔϜͷऔಘͱදࣔ 6. ϑΥʔϜͷมߋ 7. ࿅श
DrupalͷForm APIͱ
DrupalαΠτͰ࣮͞Ε͍ͯΔ༷ʑͳϑΥʔϜ ͜ΕΒͷϑΥʔϜ ͲͷΑ͏ʹ࣮ ͞Ε͍ͯΔͩΖ ͏ʁ هࣄ࡞ϑΥʔϜ ίϝϯτϑΥʔϜ ઃఆϑΥʔϜ ݕࡧϑΥʔϜ ϩάΠϯϑΥʔϜ
DrupalͷForm API – DrupalͷForm APIɺHTMLϑΥʔϜΛૢ࡞͢ΔͨΊͷநԽϨΠϠͰ͢ɻ – ϑΥʔϜͷఆٛɺදࣔɺݕূɺૹ৴ɺͱ͍͏ϥΠϑαΠΫϧΛ੍ޚ͠·͢ɻ – \Drupal\Core\Form\FormInterfaceΛ࣮ͯ͠ϑΥʔϜΫϥεΛ࡞͢Δ͜ͱͰɺΧελ ϜϞδϡʔϧͰϑΥʔϜΛ੍ޚͰ͖·͢ɻ
– ϑΥʔϜ͕ཁٻ͞ΕΔͱɺϑΥʔϜϨϯμϦϯάՄೳͳ$formྻͱͯ͠ఆٛ͞Ε· ͢ɻ – $formྻϨϯμϦϯάͷաఔͰHTMLʹม͞ΕɺΤϯυϢʔβʔʹදࣔ͞Ε·͢ɻ https://www.drupal.org/docs/drupal-apis/form- api/introduction-to-form-api
Form APIΛར༻͢ΔϝϦοτ ϑΥʔϜͷ࡞ʹForm APIΛར༻͢Δ͜ͱͰɺ࣍ͷར͕͋Γ·͢ɻ – શͯͷϑΥʔϜͰҰ؏ͨ͠HTMLग़ྗ͕ՄೳʹͳΓ·͢ɻ – ผϞδϡʔϧͰఏڙ͞ΕΔϑΥʔϜɺෳࡶͳݕࡧஔϩδοΫΛ༻͢ Δ͜ͱͳ͘؆୯ʹมߋͰ͖·͢ɻ –
ϑΝΠϧΞοϓϩʔυථΟδΣοτͳͲͷෳࡶͳϑΥʔϜཁૉɺද ࣔ/ॲཧϩδοΫͷ྆ํΛؚΉ࠶ར༻ՄೳͳόϯυϧʹΧϓηϧԽͰ͖·͢ɻ
ϑΥʔϜ࣮ͷओͳྲྀΕ 1. ϑΥʔϜΫϥεͷ࡞ \Drupal\Core\Form\FormInterface Λ࣮ͨ͠FormBaseɺConfigFormBaseɺConfirmFormBaseͱ ͍͏جఈΫϥε͕༻ҙ͞Ε͍ͯ·͢ɻϑΥʔϜͷ༻్ʹ߹Θͤͯ͜ΕΒͷجఈΫϥε͕ར༻Ͱ͖ ·͢ɻ 1. ඞཁͳϝιουͷ࣮ FormBaseΛ֦ுͨ͠ϑΥʔϜΫϥεʹgetFormID()ɺbuildForm()ɺsubmitForm()ͷ3ͭͷϝιο
υ͕ඞཁͰ͢ɻ 1. ϑΥʔϜͷදࣔ ࡞ͨ͠ϑΥʔϜϧʔςΟϯάʹొͯ͠ϖʔδͱͯ͠දࣔͨ͠ΓɺFormBuilderαʔϏεΛར ༻ͯ͠ϒϩοΫͰදࣔͨ͠ΓͰ͖·͢ɻ
ԋश ϑΥʔϜΛ࡞ͯ͠ΈΑ͏ʂ 1. ϞδϡʔϧͷσΟϨΫτϦԼʹsrc/Form/MaruchaForm.php ϑΝΠϧΛ ࡞ͯ͠ɺϑΥʔϜΫϥεΛ࡞͢Δ 2. ඞཁͳϝιουΛ࣮͢Δ 3. marucha.routing.ymlϑΝΠϧʹϧʔςΟϯάΛઃఆ͢Δ
ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol4
ϑΥʔϜͷछྨ
ϑΥʔϜͷछྨ ϑΥʔϜΛ࡞͢Δʹ \Drupal\Core\Form\FormInterface Λ࣮ͨ͠ ϑΥʔϜΫϥε͕ඞཁͰ͢ɻFormInterfaceΛ࣮͢Δ͜ͱͰ͖ ·͕͢ɺForm APIͰศརͳجఈΫϥε͕3ͭ༻ҙ͞Ε͍ͯ·͢ɻ – FormBas e
– ConfigFormBas e – ConfirmFormBase ࡞͢ΔϑΥʔϜͷ༻్ʹ Ԡͯ͡ɺ͜ΕΒͷجఈΫϥ εΛ֦ுͯ͠ϑΥʔϜΫϥ εΛ࡞Ͱ͖·͢ɻ
֤Ϋϥεͷؔੑ FormBase ConfigFormBase ConfirmFormBase <<interface>> FormInterface • ConfigFormBas e •
ConfirmFormBas e ͜ͷೋͭͷΫϥε FormBaseΫϥεΛ֦ு͠· ͢ɻ
ϑΥʔϜͷछྨ - FormBase – FormBaseΫϥεɺҰൠతͳ ϑΥʔϜΛ࡞͢Δࡍʹར༻Ͱ ͖·͢ɻ – ྫɿݕࡧϑΥʔϜ –
FormBaseΫϥε FormInterface Λ࣮͍ͯ͠· ͢ɻ
ϑΥʔϜͷछྨ - ConfigFormBase – ConfigFormBaseΫϥεɺγεςϜ ઃఆΛߦ͏ϑΥʔϜΛ࡞͢Δࡍʹ ར༻Ͱ͖·͢ɻ – ྫɿαΠτͷجຊઃఆ –
ConfigFormBaseΫϥε FormBaseΫϥεΛ֦ு͍ͯ͠·͢ɻ
ϑΥʔϜͷछྨ - ConfirmFormBase – ConfirmFormBaseΫϥεɺ֬ೝը໘Λ࣮͍ͨ͠ͱ͖ʹར༻Ͱ͖· ͢ɻ – ྫɿίϯςϯπΞΠςϜͷআ֬ೝ – ConfirmFormBaseΫϥεFormBaseΫϥεΛ֦ு͍ͯ͠·͢ɻ
ϑΥʔϜΫϥεͷϝιου
FormInterfaceͰ༻ҙ͞Ε͍ͯΔϝιου FormInterfaceͰ࣍ͷ4ͭͷநϝιου͕ఆٛ͞Ε͍ͯ·͢ɻ FormInterfaceΛ࣮͢ΔϑΥʔϜΫϥεͰ͜ΕΒͷϝιουͷ࣮ ͕ඞਢͰ͢ɻ – getFormId( ) – buildForm( )
– validateForm( ) – submitForm()
FormInterfaceͰ࣍ͷ4ͭͷநϝιου͕ఆٛ͞Ε͍ͯ·͢ɻ FormInterfaceΛ࣮͢ΔϑΥʔϜΫϥεͰ͜ΕΒͷϝιουͷ࣮͕ ඞਢͰ͢ɻ – getFormId( ) – buildForm( ) –
validateForm() ※FormBaseΫϥεΛ֦ு͢ΔΫϥεͰҙ࣮ – submitForm() FormInterfaceͰ༻ҙ͞Ε͍ͯΔϝιου ͜ΕΒͷϝιουͷ࣮͕ඞ ਢͰ͕͢ɾɾɾ FormBaseΫϥεͰ validateForm()ͷΈ࣮͞Εͯ ͍·͢ɻͳͷͰFormBaseΛ֦ ு͢ΔΫϥεͰ validateForm()ͷΈҙͰ͢ɻ
getFormId() – ϑΥʔϜʹҰҙͷIDΛ༩͠·͢ɻ – ϑΥʔϜʹඞͣID͕ඞཁͰ͢ɻ – ҰҙੑΛ࣮֬ʹ͢ΔʹɺIDʹϞδϡʔϧͷϚγϯ໊ΛؚΊΔ ͜ͱͰ͢ɻ public function
getFormId() { return 'marucha_simple_form'; }
buildForm() – $formྻͰHTMLϑΥʔϜΛߏங͠·͢ɻ public function buildForm(array $form, FormStateInterface $form_state) {
$form['name'] = [ '#type' => 'textfield', '#title' => '໊લ', ]; $form['phone'] = [ '#type' => 'tel', '#title' => 'ి൪߸', ]; $form['submit'] = [ '#type' => 'submit', '#value' => 'อଘ', ]; return $form; }
validateForm() – ͷ͞ɺϝʔϧΞυϨεݕূͳͲೖྗ͕ཁ݅Λຬ͍ͨͯ͠Δ͜ͱΛݕূͰ͖·͢ɻ – EmailValidatorαʔϏεͷisValidؔͰϝʔϧΞυϨεͷݕূ͕ߦ͑·͢ɻ public function validateForm(array &$form, FormStateInterface
$form_state) { if (strlen($form_state->getValue('phone')) < 3) { $form_state->setErrorByName('phone', '3จࣈҎ্ʹ͍ͯͩ͘͠͞ɻ'); } } Τϥʔϝοηʔδ͕ද ࣔ͞Εɺ֘ϑΟʔϧ υ͕͘ͳΓ·͢ɻ Ϣʔβʔ͕ૹ৴ͨ͠ϑΥʔϜͷ $form_stateΦϒδΣΫτ͔Β औಘͰ͖·͢ɻ
submitForm() – ϑΥʔϜ͔Βૹ৴͞ΕͨσʔλΛॲཧͰ͖·͢ɻ – σʔλΛσʔλϕʔεʹอଘ͢ΔɺϝʔϧΛૹ৴͢Δɺεςʔλε ϝοηʔδʹදࣔ͢Δɾɾɾ public function submitForm(array &$form,
FormStateInterface $form_state) { $this->messenger()->addStatus('͝هೖ͋Γ͕ͱ͏͍͟͝·͢ʂ'); }
ϑΥʔϜͷϨϯμϦϯά
ϑΥʔϜྻͱ – ϑΥʔϜྻɺHTMLϑΥʔϜΛߏங͢ΔͨΊͷ࿈ྻͰ͢ɻ – ཁૉͱଐੑΛ࿈ྻͰࢦఆ͢Δ͜ͱͰHTMLϑΥʔϜͱͯ͠ϨϯμϦϯά͞Ε·͢ɻ – ϑΥʔϜྻཁૉͱଐੑͰߏ͞Ε·͢ɻ $form['name'] = [
'#type' => 'textfield', '#title' => '໊લ', ]; $form['phone'] = [ '#type' => 'tel', '#title' => 'ి൪߸', ]; $form['submit'] = [ '#type' => 'submit', '#value' => 'อଘ', ]; return $form; <form action=.. . <input type=”text” … <input type=”tel” … <input type=”submit”...
ཁૉͱଐੑͷݟ͚ํ ཁૉɿ#Ͱ࢝·Βͳ͍ ଐੑɿ#Ͱ࢝·Δ $form['name'] = [ '#type' => 'textfield', '#title'
=> '໊લ', ]; $form['phone'] = [ '#type' => 'tel', '#title' => 'ి൪߸', ]; $form['submit'] = [ '#type' => 'submit', '#value' => 'อଘ', ];
ࢦఆՄೳͳଐੑͷྫ ଐੑ આ໌ ࢦఆྫ #type ཁૉͷλΠϓ '#type' => 'textfield' #title
ཁૉͷλΠτϧ '#title' => '໊લ' #description ཁૉΛઆ໌͢ΔͨΊͷςΩετ '#description' => '໊લΛೖྗͯ͘͠ ͍ͩ͞ɻ' #required ཁૉ͕ೖྗඞਢ͔Ͳ͏͔ '#required' => TRUE ଞʹࢁ͋Γ·͢ɻৄࡉͪ͜ΒΛ͝ཡ͍ͩ͘͞ɻ https://www.drupal.org/docs/drupal-apis/form-api/form-render-elements
ࢦఆՄೳͳtypeଐੑͷ આ໌ ϨϯμϦϯάྫ textfield 1ߦͷςΩετϑΟʔϧυ <input type=”text”... number ೖྗͷͨΊͷϑΟʔϧυ
<input type=”number”... radio / radios ୯Ұ or ෳͷϥδΦϘλϯ <input type=”radio”... email ϝʔϧΞυϨεೖྗͷͨΊͷϑΟʔϧυ <input type=”email”... tel ి൪߸ೖྗͷͨΊͷϑΟʔϧυ <input type=”tel”... hidden ը໘্ʹදࣔ͞Εͳ͍Ӆ͠σʔλ <input type=”hidden”... submit ϑΥʔϜͷૹ৴Ϙλϯ <input type=”submit”... ଞʹࢁ͋Γ·͢ɻৄࡉͪ͜ΒΛ͝ཡ͍ͩ͘͞ɻ https://api.drupal.org/api/drupal/elements https://drupalize.me/tutorial/form-element-reference
ԋश ϑΥʔϜྻΛۦͯ͠৭ΜͳϑΟʔϧυΛ࡞ͬͯΈΑ͏ʂ – ϝʔϧΞυϨεϑΟʔϧυ – ి൪߸ϑΟʔϧυ – ϥδΦϘλϯϑΟʔϧυ – νΣοΫϘοΫεϑΟʔϧυ
– બϑΟʔϧυ – ΧϥʔϑΟʔϧυ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol4
ϑΥʔϜͷऔಘͱදࣔ
࡞ͨ͠ϑΥʔϜΛදࣔ͢Δ ࡞ͨ͠ϑΥʔϜΛදࣔ͢Δํ๏ओʹ2ͭ͋Γ·͢ɻ – ϑΥʔϜΫϥεΛϧʔςΟϯάγεςϜʹొ͢Δ – FormBuilderαʔϏεͰϑΥʔϜΛऔಘ͢Δ
ϑΥʔϜΫϥεΛϧʔςΟϯάγεςϜʹొ͢Δ _formΩʔʹϑΥʔϜΫϥεΛࢦఆ͢Δ͜ͱͰɺϧʔςΟϯάγεςϜʹొͰ͖ ·͢ɻ͜ΕʹΑͬͯɺࢦఆͨ͠URLύεʹԠͯ͡ϑΥʔϜΛऔಘɺදࣔͰ͖·͢ɻ marucha.form: path: '/marucha/form' defaults: _title: 'Marucha form'
_form: '\Drupal\marucha\Form\MaruchaForm' requirements: _permission: 'access content' ίϯτϩʔϥʔΫϥεͷ ߹ Class::methodͷܗࣜ Ͱهड़͠·͕ͨ͠ɺϑΥʔ ϜΫϥεΫϥε໊ͷΈΛ ࢦఆ͠·͢ɻ
FormBuilderαʔϏεͰϑΥʔϜΛऔಘ͢Δ Form APIͰɺϑΥʔϜͷऔಘͱॲཧʹ༻Ͱ͖Δ FormBuilder αʔϏε͕ ༻ҙ͞Ε͍ͯ·͢ɻ ͜ͷαʔϏεΛར༻͢Δ͜ͱͰɺϒϩοΫͷϧʔτ֎ͰϑΥʔϜͷऔಘͱ ද͕ࣔߦ͑·͢ɻ class MaruchaBlock
extends BlockBase { public function build() { return \Drupal::formBuilder()->getForm('Drupal\marucha\Form\MaruchaForm'); } }
ԋश ϑΥʔϜΛϒϩοΫʹදࣔͯ͠ΈΑ͏ʂ 1. ϑΥʔϜΫϥεΛ࡞͢Δ 2. ϒϩοΫΫϥεΛ࡞ͯ͠ɺϒϩοΫΫϥεͰFormBuilder αʔϏεΛ༻ͯ͠ϑΥʔϜΛऔಘ͢Δ 3. Drupalཧը໘͔Β ϒϩοΫϨΠΞτ
ʹҠಈͯ͠ҙͷ Ϧʔδϣϯʹ࡞ͨ͠ϒϩοΫΛஔ͢Δ ίʔυͪ͜Βˠ https://github.com/hmaruyama/my-drupal9-module/compare/vol4
ϑΥʔϜͷมߋ
ϑΥʔϜͷมߋ طଘͷϑΥʔϜΛมߋ͢Δ߹ɺϑοΫͰߦ͍·͢ɻForm API͔ΒϑΥʔϜΛม ߋ͢ΔͨΊͷϑοΫ͕ఏڙ͞Ε͍ͯ·͢ɻ – hook_form_alter()ɿ༷ʑͳϑΥʔϜΛಉ࣌ʹมߋ͍ͨ͠ͳͲ – hook_form_FORM_ID_alter()ɿ୯ҰͷϑΥʔϜΛมߋ͢Δ
࿅श
࿅श1 ࣍ͷΑ͏ͳϑΥʔϜΫϥεΛ࡞ͨ͠ͱ͜Ζɺ Fatal error͕ൃੜ͠·ͨ͠ɻߟ͑ΒΕΔݪҼͲ ΕͰ͔͢ʁ 1. ࣮͖͢ϝιου͕࣮͞Ε͍ͯͳ͍ɻ 2. ະ༻ͷม͕͋Δɻ 3.
αʔϏεͷΞΫηεʹάϩʔόϧ͕ؔ ༻͞Ε͍ͯΔɻ 4. ྻͷࢦఆʹ [ ] Ͱͳ͘ array() ͕༻͞ Ε͍ͯΔɻ class MaruchaForm extends FormBase { public function buildForm(array $form, FormStateInterface $form_state) { $form['name'] = array( '#type' => 'textfield', '#title' => '໊લ', ); $form['submit'] = array( '#type' => 'submit', '#value' => 'อଘ', ); return $form; } public function validateForm(array &$form, FormStateInterface $form_state) { if (mb_strlen($form_state->getValue('name')) < 3) { $form_state->setErrorByName('name', '3จࣈҎ্ʹ͍ͯͩ͘͠͞ɻ'); } } public function submitForm(array &$form, FormStateInterface $form_state) { \Drupal::messenger()->addStatus('͝هೖ͋Γ͕ͱ͏͍͟͝·͢ʂ'); } }
࿅श1 ࣍ͷΑ͏ͳϑΥʔϜΫϥεΛ࡞ͨ͠ͱ͜Ζɺ Fatal error͕ൃੜ͠·ͨ͠ɻߟ͑ΒΕΔݪҼͲ ΕͰ͔͢ʁ 1. ࣮͖͢ϝιου͕࣮͞Ε͍ͯͳ͍ɻ 2. ະ༻ͷม͕͋Δɻ 3.
αʔϏεͷΞΫηεʹάϩʔόϧ͕ؔ ༻͞Ε͍ͯΔɻ 4. ྻͷࢦఆʹ [ ] Ͱͳ͘ array() ͕༻͞ Ε͍ͯΔɻ class MaruchaForm extends FormBase { public function buildForm(array $form, FormStateInterface $form_state) { $form['name'] = array( '#type' => 'textfield', '#title' => '໊લ', ); $form['submit'] = array( '#type' => 'submit', '#value' => 'อଘ', ); return $form; } public function validateForm(array &$form, FormStateInterface $form_state) { if (mb_strlen($form_state->getValue('name')) < 3) { $form_state->setErrorByName('name', '3จࣈҎ্ʹ͍ͯͩ͘͠͞ɻ'); } } public function submitForm(array &$form, FormStateInterface $form_state) { \Drupal::messenger()->addStatus('͝هೖ͋Γ͕ͱ͏͍͟͝·͢ʂ'); } }
࿅श2 ΧελϜϞδϡʔϧͰ࡞ͨ͠ϑΥʔϜΛϒϩοΫʹදࣔ͢ΔʹͲͷํ ๏͕ར༻Ͱ͖·͔͢ʁ 1. *.moduleϑΝΠϧͰhook_form_FORM_ID_alter()Λ࣮ͯ͠ϑΥʔϜΛ औಘ͢Δɻ 2. ϒϩοΫΫϥεͰdrupal_get_form()Λ༻ͯ͠ϑΥʔϜΛऔಘ͢Δɻ 3. ϒϩοΫΫϥεͰFormBuilderαʔϏεΛ༻ͯ͠ϑΥʔϜΛऔಘ͢
Δɻ
࿅श2 ΧελϜϞδϡʔϧͰ࡞ͨ͠ϑΥʔϜΛϒϩοΫʹදࣔ͢ΔʹͲͷํ ๏͕ར༻Ͱ͖·͔͢ʁ 1. *.moduleϑΝΠϧͰhook_form_FORM_ID_alter()Λ࣮ͯ͠ϑΥʔϜΛ औಘ͢Δɻ 2. ϒϩοΫΫϥεͰdrupal_get_form()Λ༻ͯ͠ϑΥʔϜΛऔಘ͢Δɻ 3. ϒϩοΫΫϥεͰFormBuilderαʔϏεΛ༻ͯ͠ϑΥʔϜΛऔಘ͢
Δɻ
࿅श3 ίΞͰఏڙ͞Ε͍ͯΔϑΥʔϜͷ༰ΛΧελϜϞδϡʔϧଆͰมߋ ͍ͨ͠Ͱ͢ɻ࣍ͷ͏ͪదͳํ๏Λ1ͭબ͍ͯͩ͘͠͞ɻ 1. ίΞΛϋοΫ͢Δɻ 2. hook_form_FORM_ID_alter()Λ࣮ͯ͠ϑΥʔϜΛ্ॻ͖͢Δɻ 3. FormBuilderαʔϏεͷgetForm()Λ༻ͯ͠ϑΥʔϜΛ্ॻ͖͢ Δɻ
࿅श3 ίΞͰఏڙ͞Ε͍ͯΔϑΥʔϜͷ༰ΛΧελϜϞδϡʔϧଆͰมߋ ͍ͨ͠Ͱ͢ɻ࣍ͷ͏ͪదͳํ๏Λ1ͭબ͍ͯͩ͘͠͞ɻ 1. ίΞΛϋοΫ͢Δɻ 2. hook_form_FORM_ID_alter()Λ࣮ͯ͠ϑΥʔϜΛ্ॻ͖͢Δɻ 3. FormBuilderαʔϏεͷgetForm()Λ༻ͯ͠ϑΥʔϜΛ্ॻ͖͢ Δɻ
ຊͷΞδΣϯμऴྃ
ΞδΣϯμ 1. DrupalͷForm APIͱ 2. ϑΥʔϜͷछྨ 3. ϑΥʔϜΫϥεͷϝιου 4. ϑΥʔϜͷϨϯμϦϯά
5. ϑΥʔϜͷऔಘͱදࣔ 6. ϑΥʔϜͷมߋ 7. ࿅श
None