Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FuelPHP 実践 Validation
Search
2no
July 08, 2012
13k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FuelPHP 実践 Validation
初発表資料
2no
July 08, 2012
More Decks by 2no
See All by 2no
最近流行り?の Middleman でモダンな Web 開発
2no
1
1.3k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
How to make the Groovebox
asonas
2
2.3k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
220
YesSQL, Process and Tooling at Scale
rocio
174
15k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Side Projects
sachag
455
43k
A designer walks into a library…
pauljervisheath
211
24k
Transcript
FuelPHP ࣮ફ Validation FuelPHP ษڧձ ౦ژ Vol.1 2012/07/08 1.2.1 @wakuworks
גࣜձࣾ 127݄8༵
ࣗݾհ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
1.2.1 @wakuworks גࣜձࣾ 127݄8༵
•ೋٶ ಙʢχϊϛϠ ΧζϊϦʣ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
•ೋٶ ಙʢχϊϛϠ ΧζϊϦʣ •Twitterɿ@wakuworks 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
•ೋٶ ಙʢχϊϛϠ ΧζϊϦʣ •Twitterɿ@wakuworks •גࣜձࣾ ಼ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
•ೋٶ ಙʢχϊϛϠ ΧζϊϦʣ •Twitterɿ@wakuworks •גࣜձࣾ ಼ •PHP ྺ̏͘Β͍ 1.2.1 @wakuworks
גࣜձࣾ 127݄8༵
ࣗʹͱͬͯ ͕ ॳϑϨʔϜϫʔΫ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ΞδΣϯμ 1. جຊతͳ͍ํ 2. Τϥʔϝοηʔδ 3. ϧʔϧʹ͍ͭͯ 1. ಠࣗόϦσʔγϣϯ 2.
ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ΞδΣϯμ 4. Ԡ༻ 1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 3. ྻΛόϦσʔτ͢Δʹʁ 4.
ZendFramework Λ͏ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ΞδΣϯμ 5. ͓·͚ 6. ·ͱΊ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
1. جຊతͳ͍ํ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
1. جຊతͳ͍ํ 24 $val = \Validation::forge(); 25 26 $val->add('name', '໊લ')
27 ->add_rule('trim') 28 ->add_rule('required') 29 ->add_rule('max_length', 20); 30 31 $val->add_field('email', 'ϝʔϧΞυϨε', 32 'trim|required|valid_email'); 33 34 if ($val->run()) 35 { 36 // ޭ࣌ͷॲཧ 37 } 38 else 39 { 40 // ࣦഊ࣌ͷॲཧ 41 } 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
1. جຊతͳ͍ํ 24 $val = \Validation::forge(); → Validation ΦϒδΣΫτͷੜ →
add ϝιουͰϑΟʔϧυ໊ͱϥϕϧͷՃ ɹ ଓ͍ͯɺ add_ruleϝιουͰϧʔϧ ʢݕূɾܗʣ ΛՃ 26 $val->add('name', '໊લ') 27 ->add_rule('trim') 28 ->add_rule('required') 29 ->add_rule('max_length', 20); 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
1. جຊతͳ͍ํ → add_field ϝιουɺ ɹ ϑΟʔϧυ໊ɺ ϥϕϧɺ ϧʔϧ ʢݕূɾܗʣ
ΛҰׅࢦఆ → run ϝιουͰόϦσʔγϣϯ࣮ߦɻ ɹ ͕ແ͚Ε TRUE Λฦ͢ɻ 31 $val->add_field('email', 'ϝʔϧΞυϨε', 32 'trim|required|valid_email'); 34 if ($val->run()) 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
run() ࣮ߦޙ 1. جຊతͳ͍ํ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
run() ࣮ߦޙ • $val->error() ͰɺݕূΤϥʔͷऔಘ 1. جຊతͳ͍ํ 1.2.1 @wakuworks גࣜձࣾ
127݄8༵
run() ࣮ߦޙ • $val->error() ͰɺݕূΤϥʔͷऔಘ • $val->validated() Ͱɺܗޙͷͷऔಘ ͨͩ͠ɺ్தͰݕূΤϥʔʹͳΔͱɺ ͦͷϑΟʔϧυͷΛฦͯ͘͠Εͳ͍ɻ
1. جຊతͳ͍ํ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
34 $errors = !$val->run() ? $val->error() : array(); 35 $values
= $val->validated(); 36 37 foreach ($errors as $key => $error) 38 { 39 $values[$key] = $error->value; 40 } ࣗͷ߹ɺΤϥʔ͕ൃੜͯ͠ܗ్தͷཉ͍͠ͷ ͰɺԼهͷ༷ʹ͍ͯ͠·͢ɻ 1. جຊతͳ͍ํ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
34 $errors = !$val->run() ? $val->error() : array(); 35 $values
= $val->validated(); 36 37 foreach ($errors as $key => $error) 38 { 39 $values[$key] = $error->value; 40 } ࣗͷ߹ɺΤϥʔ͕ൃੜͯ͠ܗ్தͷཉ͍͠ͷ ͰɺԼهͷ༷ʹ͍ͯ͠·͢ɻ 1. جຊతͳ͍ํ 1.2.1 @wakuworks גࣜձࣾ Τϥʔൃੜ࣌ͷ 127݄8༵
2. Τϥʔϝοηʔδ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
76 'language' => 'ja', 77 'language_fallback' => 'en', 78 'locale'
=> 'ja_JP', 1.2.1 @wakuworks גࣜձࣾ 2. Τϥʔϝοηʔδ APPPATH/config/config.php ΤϥʔϝοηʔδΛઃఆ͢ΔલʹɺݴޠΛຊޠʹมߋ 127݄8༵
76 'language' => 'ja', 77 'language_fallback' => 'en', 78 'locale'
=> 'ja_JP', 1.2.1 @wakuworks גࣜձࣾ 2. Τϥʔϝοηʔδ APPPATH/config/config.php ΤϥʔϝοηʔδΛઃఆ͢ΔલʹɺݴޠΛຊޠʹมߋ ͜ΕͰ APPPATH/lang/ja Λݟʹߦ͘Α͏ʹͳΔɻ ݴޠϑΝΠϧ͕ແ͚Εɺࣗಈతʹ language_fallback Ͱઃ ఆ͍ͯ͠Δ en Λݟʹߦ͘ͷͰ҆৺ 127݄8༵
σϑΥϧτͷΤϥʔϝοηʔδ Λ validation.php ʹઃఆ͓ͯ͘͠ 2. Τϥʔϝοηʔδ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
2. Τϥʔϝοηʔδ 1 <?php 2 return array( 3 'required' =>
':label ඞਢ߲Ͱ͢ɻ', 4 'min_length' => ':label ͕ :param:1 จࣈະຬͰ͢ɻ', 5 'max_length' => ':label ͕ :param:1 จࣈΛ͍͑ͯ·͢ɻ', 6 'exact_length' => ':label ͕ :param:1 จࣈͰ͋Γ·ͤΜɻ', 7 'match_value' => ':label :param:1 ͱҰக͠·ͤΜɻ', 8 'match_pattern' => ':label :param:1 ͱҰக͢ΔύλʔϯͰ͋Γ·ͤΜɻ', 9 'match_field' => ':label :param:1 ͱҟͳΓ·͢ɻ', 10 'valid_email' => ':label ༗ޮͳϝʔϧΞυϨεͰ͋Γ·ͤΜɻ', 11 'valid_emails' => ':label ʹ༗ޮͰͳ͍ϝʔϧΞυϨεؚ͕·Ε͍ͯ·͢ɻ', 12 'valid_url' => ':label ༗ޮͳURLͰ͋Γ·ͤΜɻ', 13 'valid_ip' => ':label ༗ޮͳIPΞυϨεͰ͋Γ·ͤΜɻ', 14 'numeric_min' => ':label ͷ͕ :param:1 ະຬͰ͢ɻ', 15 'numeric_max' => ':label ͷ͕ :param:1 Λ͍͑ͯ·͢ɻ', 16 'valid_string' => ':label ʹෆਖ਼ͳจࣈؚ͕·Ε͍ͯ·͢ɻ', 17 ); APPPATH/lang/ja/validation.php 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
σϑΥϧτΛઃఆ͓ͯ͘͠ͱ ϞδϡʔϧΛ࡞ͬͨ࣌ʹศར 2. Τϥʔϝοηʔδ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
APPPATH/modules/hoge/lang/ja/validation.php 1 <?php 2 return array( 3 'required' => 'hogeϞδϡʔϧ༻ͷΤϥʔϝοηʔδ',
4 ); ͜ͷ߹ɺrequired Ҏ֎ͷΤϥʔϝοηʔδ σϑΥϧτ͕ΘΕΔɻ 2. Τϥʔϝοηʔδ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
26 $val->add('name', '໊લ') 27 ->add_rule('trim') 28 ->add_rule('required') 29 ->add_rule('max_length', 20);
31 $val->add_field('email', 'ϝʔϧΞυϨε', 32 'trim|required|valid_email'); 3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
26 $val->add('name', '໊લ') 27 ->add_rule('trim') 28 ->add_rule('required') 29 ->add_rule('max_length', 20);
31 $val->add_field('email', 'ϝʔϧΞυϨε', 32 'trim|required|valid_email'); ϧʔϧ 3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
26 $val->add('name', '໊લ') 27 ->add_rule('trim') 28 ->add_rule('required') 29 ->add_rule('max_length', 20);
31 $val->add_field('email', 'ϝʔϧΞυϨε', 32 'trim|required|valid_email'); ϧʔϧ ύΠϓͭͳ͗ͷϧʔϧ 3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
3. ϧʔϧʹ͍ͭͯ ೋ௨Γͷϧʔϧ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
3. ϧʔϧʹ͍ͭͯ ೋ௨Γͷϧʔϧ • ݕূʢόϦσʔτʣ Γ͕ BOOL Ͱ͋Δ߹ 1.2.1 @wakuworks
גࣜձࣾ $val->add('id', 'Ϣʔβʔ ID') ->add_rule(function($val) { return !!$val; }); 127݄8༵
3. ϧʔϧʹ͍ͭͯ ೋ௨Γͷϧʔϧ • ݕূʢόϦσʔτʣ Γ͕ BOOL Ͱ͋Δ߹ 1.2.1 @wakuworks
גࣜձࣾ $val->add('id', 'Ϣʔβʔ ID') ->add_rule(function($val) { return !!$val; }); TRUE or FALSE 127݄8༵
3. ϧʔϧʹ͍ͭͯ ೋ௨Γͷϧʔϧ • ݕূʢόϦσʔτʣ Γ͕ BOOL Ͱ͋Δ߹ • ܗʢϑΟϧλʣ
Γ͕ BOOL Ͱͳ͍߹ 1.2.1 @wakuworks גࣜձࣾ $val->add('id', 'Ϣʔβʔ ID') ->add_rule(function($val) { return !!$val; }); $val->add('id', 'Ϣʔβʔ ID') ->add_rule(function($val) { return trim($val); }); TRUE or FALSE 127݄8༵
add_rule Ͱࢦఆग़དྷΔϧʔϧ 3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
add_rule Ͱࢦఆग़དྷΔϧʔϧ • FuelPHP ଆͰ༻ҙ͍ͯ͠Δϧʔϧ 3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ
127݄8༵
add_rule Ͱࢦఆग़དྷΔϧʔϧ • FuelPHP ଆͰ༻ҙ͍ͯ͠Δϧʔϧ • add_callable, add_model Ͱొͨ͠ϧʔϧ 3.
ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
add_rule Ͱࢦఆग़དྷΔϧʔϧ • FuelPHP ଆͰ༻ҙ͍ͯ͠Δϧʔϧ • add_callable, add_model Ͱొͨ͠ϧʔϧ •
ίʔϧόοΫ ϏϧτΠϯɺϢʔβఆٛؔɺ ΠϯελϯεϝιουɺΫϥεϝιουɺແ໊ؔ 3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
3. ϧʔϧʹ͍ͭͯ add_field Ͱࢦఆग़དྷΔϧʔϧ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
3. ϧʔϧʹ͍ͭͯ add_field Ͱࢦఆग़དྷΔϧʔϧ • FuelPHP ଆͰ༻ҙ͍ͯ͠Δϧʔϧ 1.2.1 @wakuworks גࣜձࣾ
127݄8༵
3. ϧʔϧʹ͍ͭͯ add_field Ͱࢦఆग़དྷΔϧʔϧ • FuelPHP ଆͰ༻ҙ͍ͯ͠Δϧʔϧ • add_callable, add_model
Ͱొͨ͠ϧʔϧ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
3. ϧʔϧʹ͍ͭͯ add_field Ͱࢦఆग़དྷΔϧʔϧ • FuelPHP ଆͰ༻ҙ͍ͯ͠Δϧʔϧ • add_callable, add_model
Ͱొͨ͠ϧʔϧ • ίʔϧόοΫ ϏϧτΠϯɺϢʔβఆٛؔɺ ΠϯελϯεϝιουɺΫϥεϝιουɺແ໊ؔ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
• required • min_length • max_length • exact_length • match_value
• match_pattern • match_field 3. ϧʔϧʹ͍ͭͯ 1.2.1 @wakuworks גࣜձࣾ FuelPHP ଆ͕༻ҙ͍ͯ͠Δϧʔϧ • valid_email • valid_emails • valid_url • valid_ip • numeric_min • numeric_max • valid_string 127݄8༵
3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
add_callable, add_model Λ༻͍Δ߹ 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
1 <?php 2 class MyRules 3 { 4 public static
function _validation_is_upper($val) 5 { 6 return $val === strtoupper($val); 7 } 8 } 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ APPPATH/classes/myrules.php 127݄8༵
1 <?php 2 class MyRules 3 { 4 public static
function _validation_is_upper($val) 5 { 6 return $val === strtoupper($val); 7 } 8 } 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ APPPATH/classes/myrules.php ಄ࣙʢඞਢʣ 127݄8༵
24 $val = \Validation::forge(); 25 $val->add_callable('MyRules'); 26 27 $val->add('name', '໊લ')
28 ->add_rule('is_upper'); 29 $val->add_field('email', 'ϝʔϧΞυϨε', 'is_upper'); 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ APPPATH/lang/ja/validation.php 1 <?php 2 return array( 3 'is_upper' => ':labelେจࣈͰೖྗ͍ͯͩ͘͠͞ɻ', 4 ); 127݄8༵
24 $val = \Validation::forge(); 25 $val->add_callable('MyRules'); 26 27 $val->add('name', '໊લ')
28 ->add_rule('is_upper'); 29 $val->add_field('email', 'ϝʔϧΞυϨε', 'is_upper'); 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ Ϋϥε໊·ͨͦͷΠϯελϯεΛೖΕΔ APPPATH/lang/ja/validation.php 1 <?php 2 return array( 3 'is_upper' => ':labelେจࣈͰೖྗ͍ͯͩ͘͠͞ɻ', 4 ); 127݄8༵
24 $val = \Validation::forge(); 25 $val->add_callable('MyRules'); 26 27 $val->add('name', '໊લ')
28 ->add_rule('is_upper'); 29 $val->add_field('email', 'ϝʔϧΞυϨε', 'is_upper'); 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ Ϋϥε໊·ͨͦͷΠϯελϯεΛೖΕΔ Ճͨ͠ϧʔϧ APPPATH/lang/ja/validation.php 1 <?php 2 return array( 3 'is_upper' => ':labelେจࣈͰೖྗ͍ͯͩ͘͠͞ɻ', 4 ); 127݄8༵
ϝιουΛ༻͍Δ߹ 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
1 <?php 2 class MyRules 3 { 4 public static
function is_upper($val) 5 { 6 return $val === strtoupper($val); 7 } 8 } APPPATH/classes/myrules.php 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ 31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(array('MyRules', 'is_upper')) 33 ->add_rule(array(new MyRules(), 'is_upper')); 127݄8༵
APPPATH/lang/ja/validation.php 1 <?php 2 return array( 3 'MyRules:is_upper' => ':labelେจࣈͰೖྗ͍ͯͩ͘͠͞ɻ',
4 ); 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ແ໊ؔΛ༻͍Δ߹ 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(function($val) { 33 if ($val
!== strtolower($val)) 34 { 35 \Validation::active()->set_message( 36 'closure', 37 ':labelখจࣈͰೖྗ͍ͯͩ͘͠͞ɻ'); 38 return false; 39 } 40 return true; 41 }); 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(function($val) { 33 if ($val
!== strtolower($val)) 34 { 35 \Validation::active()->set_message( 36 'closure', 37 ':labelখจࣈͰೖྗ͍ͯͩ͘͠͞ɻ'); 38 return false; 39 } 40 return true; 41 }); 3-1. ಠࣗόϦσʔγϣϯ 1.2.1 @wakuworks גࣜձࣾ ϧʔϧ໊͕ closure ʹͳΔʹ 127݄8༵
3-2. ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ϝιουΛ༻͍Δ߹ 3-2. ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
3-2. ಠࣗϑΟϧλ 1 <?php 2 class MyRules 3 { 4
public static function to_upper($val) 5 { 6 return strtoupper($val); 7 } 8 } APPPATH/classes/myrules.php 31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(array('MyRules', 'to_upper')) 33 ->add_rule(array(new MyRules(), 'to_lower')); 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ແ໊ؔΛ༻͍Δ߹ 31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(function($val) { 33 return
strtolower(trim($val)); 34 }); 3-2. ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ݸਓతʹϑΟϧλΛ·ͱΊͨ Ϋϥε͕͋Δͱૉఢͩͱࢥ͏ 3-2. ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ ޙɺͦΕΛެ։ͯ͘͠ΕΔͱͬͱૉఢ 127݄8༵
3-2. ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ 1 <?php 2 class Filter
3 { 4 public static function settype($val, $type) 5 { 6 settype($val, $type); 7 return $val; 8 } 9 // ଞͷॲཧ͕ଓ͘ 10 } APPPATH/classes/filter.php ࣗ Filter ΫϥεͳΔͷΛ࡞ͬͯɺ ͦ͜ʹॲཧΛ·ͱΊ͍ͯ·͢ɻ 127݄8༵
3-2. ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ 24 $val = \Validation::forge(); 25
26 $val->add('age', 'ྸ') 27 ->add_rule(array('Filter', 'settype'), 'integer'); 28 29 $errors = !$val->run() ? $val->error() : array(); 30 $values = $val->validated(); 31 32 foreach ($errors as $key => &$error) 33 { 34 $values[$key] = $error->value; 35 $error = ''.$error; 36 } ͬͯΈΔͱ͜Μͳײ͡ 127݄8༵
3-2. ಠࣗϑΟϧλ 1.2.1 @wakuworks גࣜձࣾ 24 $val = \Validation::forge(); 25
26 $val->add('age', 'ྸ') 27 ->add_rule(array('Filter', 'settype'), 'integer'); 28 29 $errors = !$val->run() ? $val->error() : array(); 30 $values = $val->validated(); 31 32 foreach ($errors as $key => &$error) 33 { 34 $values[$key] = $error->value; 35 $error = ''.$error; 36 } ͬͯΈΔͱ͜Μͳײ͡ 127݄8༵
4. Ԡ༻ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
4-1. ϑΟϧλʹΑΔฐ ͱͦͷରॲྫ 4. Ԡ༻ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
match_field Ͱରͷ ϑΟʔϧυʹϑΟϧλ͕ ֻ͔͍ͬͯΔͱΤϥʔͱͳΔ ߹͕͋Δ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 1.2.1 @wakuworks גࣜձࣾ
127݄8༵
1.2.1 @wakuworks גࣜձࣾ 7 $post = array( 8 'email1' =>
'
[email protected]
', 9 'email2' => '
[email protected]
' 10 ); 11 12 $val = \Validation::forge(); 13 14 $val->add('email1', 'ϝʔϧΞυϨε') 15 ->add_rule('trim') 16 ->add_rule('required') 17 ->add_rule('valid_email'); 18 19 $val->add('email2', 'ϝʔϧΞυϨεʢ֬ೝʣ') 20 ->add_rule('trim') 21 ->add_rule('required') 22 ->add_rule('match_field', 'email1'); 23 24 $val->run($post); ΤϥʔͱͳΔྫɿ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
trim ޙɺಉ͡ʹͳΔʹ ؔΘΒͣΤϥʔ 1.2.1 @wakuworks גࣜձࣾ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
Կނʁ 1.2.1 @wakuworks גࣜձࣾ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
ൺֱ͕ 1.2.1 @wakuworks גࣜձࣾ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
680 public function _validation_match_field($val, $field) 681 { 682 if ($this->input($field)
!== $val) 683 { 684 $validating = $this->active_field(); 685 throw new \Validation_Error($validating, $val, array('match_field' => array($field)), array($this- >field($field)->label)); 686 } 687 688 return true; 689 } 1.2.1 @wakuworks גࣜձࣾ COREPATH/classes/validation.php 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
680 public function _validation_match_field($val, $field) 681 { 682 if ($this->input($field)
!== $val) 683 { 684 $validating = $this->active_field(); 685 throw new \Validation_Error($validating, $val, array('match_field' => array($field)), array($this- >field($field)->label)); 686 } 687 688 return true; 689 } 1.2.1 @wakuworks גࣜձࣾ COREPATH/classes/validation.php ϑΟϧλલͷͰൺֱ͞ΕͯΔ… 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
৽͍͠ϧʔϧΛ࡞Δ 1.2.1 @wakuworks גࣜձࣾ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
1 <?php 2 class MyRules 3 { 4 public static
function _validation_match_validated_field( 5 $val, $field 6 ) { 7 $active = \Validation::active(); 8 $field_val = $active->validated($field); 9 if (!$field_val) 10 { 11 $error = $active->error($field); 12 $field_val = $error 13 ? $error->value 14 : $active->input($field); 15 } 16 return $field_val === $val; 17 } 18 } 1.2.1 @wakuworks גࣜձࣾ APPATH/classes/myrules.php 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
39 $post = array( 40 'email1' => '
[email protected]
',
41 'email2' => '
[email protected]
' 42 ); 43 44 $val = \Validation::forge(); 45 $val->add_callable('MyRules'); 46 47 $val->add('email1', 'ϝʔϧΞυϨε') 48 ->add_rule('trim') 49 ->add_rule('required') 50 ->add_rule('valid_email'); 51 52 $val->add('email2', 'ϝʔϧΞυϨεʢ֬ೝʣ') 53 ->add_rule('trim') 54 ->add_rule('required') 55 ->add_rule('match_validated_field', 'email1'); 56 57 $val->run($post); 1.2.1 @wakuworks גࣜձࣾ ৽͍͠ϧʔϧʹมߋޙɿ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
39 $post = array( 40 'email1' => '
[email protected]
',
41 'email2' => '
[email protected]
' 42 ); 43 44 $val = \Validation::forge(); 45 $val->add_callable('MyRules'); 46 47 $val->add('email1', 'ϝʔϧΞυϨε') 48 ->add_rule('trim') 49 ->add_rule('required') 50 ->add_rule('valid_email'); 51 52 $val->add('email2', 'ϝʔϧΞυϨεʢ֬ೝʣ') 53 ->add_rule('trim') 54 ->add_rule('required') 55 ->add_rule('match_validated_field', 'email1'); 56 57 $val->run($post); 1.2.1 @wakuworks גࣜձࣾ ৽͍͠ϧʔϧʹมߋޙɿ ϧʔϧͷՃ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
39 $post = array( 40 'email1' => '
[email protected]
',
41 'email2' => '
[email protected]
' 42 ); 43 44 $val = \Validation::forge(); 45 $val->add_callable('MyRules'); 46 47 $val->add('email1', 'ϝʔϧΞυϨε') 48 ->add_rule('trim') 49 ->add_rule('required') 50 ->add_rule('valid_email'); 51 52 $val->add('email2', 'ϝʔϧΞυϨεʢ֬ೝʣ') 53 ->add_rule('trim') 54 ->add_rule('required') 55 ->add_rule('match_validated_field', 'email1'); 56 57 $val->run($post); 1.2.1 @wakuworks גࣜձࣾ ৽͍͠ϧʔϧʹมߋޙɿ ϧʔϧͷՃ ϧʔϧΛࢦఆ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
1 <?php 2 return array( 3 'match_validated_field' => ':label
:param:1 ͱҰக͠·ͤΜɻ', 4 ); 1.2.1 @wakuworks גࣜձࣾ APPPATH/lang/ja/validation.php ৽͍͠ϧʔϧʹର͠ɺΤϥʔϝοηʔδΛઃఆ͓ͯ͘͠ɻ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
͜ΕͰϑΟϧλޙͷͰ ൺֱΛͯ͘͠Ε·͢ɻ 1.2.1 @wakuworks גࣜձࣾ 4-1. ϑΟϧλʹΑΔฐͱͦͷରॲྫ 127݄8༵
4-2. ಉ͡ϧʔϧͰ ෳͷΤϥʔϝοηʔδ 4. Ԡ༻ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
໊લͱੑผʹ required ͷϧʔϧΛઃఆ͍ͯͨ͠ͱͯ͠ɺ Լͷ༷ʹผʑͷΤϥʔϝοηʔδΛग़͍ͨ͠ͷ͚ͩͲ… required ໊લʢೖྗܥʣ→ʮ:labelΛೖྗ͍ͯͩ͘͠͞ɻʯ ੑผʢબܥʣ→ʮ:labelΛબ͍ͯͩ͘͠͞ɻʯ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 1.2.1
@wakuworks גࣜձࣾ 127݄8༵
validation.php ʹ ෳΤϥʔϝοηʔδΛ ઃఆ͢Δࣄग़དྷͳ͍ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
࣮ࡍ͕͍ࣗͬͯΔํ๏ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
1 <?php 2 return array( 3 'required' => ':labelΛೖྗ͍ͯͩ͘͠͞', 4
); APPPATH/lang/ja/validation.php 1 <?php 2 return array( 3 'gender' => array( 4 'required' => ':labelΛબ͍ͯͩ͘͠͞ɻ', 5 ), 6 ); APPPATH/lang/ja/error.php 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
1 <?php 2 return array( 3 'required' => ':labelΛೖྗ͍ͯͩ͘͠͞', 4
); APPPATH/lang/ja/validation.php 1 <?php 2 return array( 3 'gender' => array( 4 'required' => ':labelΛબ͍ͯͩ͘͠͞ɻ', 5 ), 6 ); APPPATH/lang/ja/error.php ϑΟʔϧυ໊ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
1 <?php 2 return array( 3 'required' => ':labelΛೖྗ͍ͯͩ͘͠͞', 4
); APPPATH/lang/ja/validation.php 1 <?php 2 return array( 3 'gender' => array( 4 'required' => ':labelΛબ͍ͯͩ͘͠͞ɻ', 5 ), 6 ); APPPATH/lang/ja/error.php ϑΟʔϧυ໊ ϧʔϧ໊ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
32 $errors = !$val->run($post) ? $val->error() : array(); 33 $values
= $val->validated(); 34 35 $err = \Lang::load('error'); 36 foreach ($errors as $key => &$error) 37 { 38 $values[$key] = $error->value; 39 if (isset($err[$key][$error->rule])) 40 { 41 $error = $error->get_message( 42 $err[$key][$error->rule]); 43 } 44 else 45 { 46 $error = ''.$error; 47 } 48 } 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
32 $errors = !$val->run($post) ? $val->error() : array(); 33 $values
= $val->validated(); 34 35 $err = \Lang::load('error'); 36 foreach ($errors as $key => &$error) 37 { 38 $values[$key] = $error->value; 39 if (isset($err[$key][$error->rule])) 40 { 41 $error = $error->get_message( 42 $err[$key][$error->rule]); 43 } 44 else 45 { 46 $error = ''.$error; 47 } 48 } ݴޠϑΝΠϧͷಡΈࠐΈ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
32 $errors = !$val->run($post) ? $val->error() : array(); 33 $values
= $val->validated(); 34 35 $err = \Lang::load('error'); 36 foreach ($errors as $key => &$error) 37 { 38 $values[$key] = $error->value; 39 if (isset($err[$key][$error->rule])) 40 { 41 $error = $error->get_message( 42 $err[$key][$error->rule]); 43 } 44 else 45 { 46 $error = ''.$error; 47 } 48 } ݴޠϑΝΠϧͷಡΈࠐΈ Τϥʔϝοηʔδͷऔಘ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
͏Ұͭํ๏͕͋Γ·͕͢ɺ ͍ͷͰׂѪ http://qiita.com/items/9d219b7300f851f9ba4f ↑ͪ͜Βʹιʔείʔυࡌ͍ͤͯΔͷͰɺ ࢼͯ͠Έ͍ͯͩ͘͞ɻ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ
127݄8༵
͋͘·Ͱࢀߟఔʹ 1.2.1 @wakuworks גࣜձࣾ 4-2. ಉ͡ϧʔϧͰෳͷΤϥʔϝοηʔδ 127݄8༵
4-3. ྻΛ όϦσʔτ͢Δʹʁ 4. Ԡ༻ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
4-3. ྻΛόϦσʔτ͢Δʹʁ 14 <form action="{ૹ৴ઌ}" method="post"> 15 <p><input type="text" name="hoge[0]"></p>
16 <p><input type="text" name="hoge[1]"></p> 17 <p><input type="text" name="hoge[2]"></p> 18 <p><input type="submit" name="ૹ৴"></p> 19 </form> ୯७ʹ name ΛೖΕͯ 26 $val->add('hoge[0]'); 27 $val->add('hoge[1]'); 28 $val->add('hoge[2]'); 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
4-3. ྻΛόϦσʔτ͢Δʹʁ 14 <form action="{ૹ৴ઌ}" method="post"> 15 <p><input type="text" name="hoge[0]"></p>
16 <p><input type="text" name="hoge[1]"></p> 17 <p><input type="text" name="hoge[2]"></p> 18 <p><input type="submit" name="ૹ৴"></p> 19 </form> ୯७ʹ name ΛೖΕͯ RUN 26 $val->add('hoge[0]'); 27 $val->add('hoge[1]'); 28 $val->add('hoge[2]'); 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
4-3. ྻΛόϦσʔτ͢Δʹʁ 14 <form action="{ૹ৴ઌ}" method="post"> 15 <p><input type="text" name="hoge[0]"></p>
16 <p><input type="text" name="hoge[1]"></p> 17 <p><input type="text" name="hoge[2]"></p> 18 <p><input type="submit" name="ૹ৴"></p> 19 </form> ୯७ʹ name ΛೖΕͯ RUN ͕औΕͳ͍… 26 $val->add('hoge[0]'); 27 $val->add('hoge[1]'); 28 $val->add('hoge[2]'); 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ϑΟʔϧυ໊ 1.2.1 @wakuworks גࣜձࣾ 4-3. ྻΛόϦσʔτ͢Δʹʁ 127݄8༵
υοτʢ.ʣͭͳ͗ͷ ϑΟʔϧυ໊ʹͯ͋͛͠Δ 1.2.1 @wakuworks גࣜձࣾ 4-3. ྻΛόϦσʔτ͢Δʹʁ 127݄8༵
26 $val->add('hoge.0'); 27 $val->add('hoge.1'); 28 $val->add('hoge.2'); 1.2.1 @wakuworks גࣜձࣾ 4-3.
ྻΛόϦσʔτ͢Δʹʁ 127݄8༵
͜ͷࢦఆํ๏ Config Ͱ༻͍͍ͯΔͷͱಉ͡ɻ ͝ஸೡʹΩʔมΘͬͯΔͷͰҙ͕ඞཁɻ 26 $val->add('hoge.0'); 27 $val->add('hoge.1'); 28 $val->add('hoge.2');
1.2.1 @wakuworks גࣜձࣾ 4-3. ྻΛόϦσʔτ͢Δʹʁ 127݄8༵
͜ͷࢦఆํ๏ Config Ͱ༻͍͍ͯΔͷͱಉ͡ɻ ͝ஸೡʹΩʔมΘͬͯΔͷͰҙ͕ඞཁɻ array(3) { ["hoge.0"]=> string(5) "hoge0" ["hoge.1"]=>
string(5) "hoge1" ["hoge.2"]=> string(5) "hoge2" } ※औಘྫ 26 $val->add('hoge.0'); 27 $val->add('hoge.1'); 28 $val->add('hoge.2'); 1.2.1 @wakuworks גࣜձࣾ 4-3. ྻΛόϦσʔτ͢Δʹʁ 127݄8༵
ͪͳΈʹɺϧʔϧݸผͰ͔͠ઃఆग़དྷͳ͍ 26 for ($i = 0; $i < 3; $i++)
27 { 28 $val->add('hoge.'.$i)->add_rule('required'); 29 } 1.2.1 @wakuworks גࣜձࣾ 4-3. ྻΛόϦσʔτ͢Δʹʁ 127݄8༵
ͪͳΈʹɺϧʔϧݸผͰ͔͠ઃఆग़དྷͳ͍ 26 for ($i = 0; $i < 3; $i++)
27 { 28 $val->add('hoge.'.$i)->add_rule('required'); 29 } ͱͯ໘͍͘͞… 1.2.1 @wakuworks גࣜձࣾ 4-3. ྻΛόϦσʔτ͢Δʹʁ 127݄8༵
4-4. Λ͏ 4. Ԡ༻ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
·ͣ४උ 1.2.1 @wakuworks גࣜձࣾ 4-4. Λ͏ 127݄8༵
αΠτ͔ΒιʔεҰࣜΛμϯϩʔυ ԼهΛࢀߟʹඞཁͳ͚ͩΛೖΕ·͢ɻ http://framework.zend.com/manual/ja/ requirements.introduction.html#requirement s.dependencies ※ ࠓճ Ver. 1.11.12 Ͱઆ໌
ʢ2 ܥͰՄʣ 1.2.1 @wakuworks גࣜձࣾ 4-4. Λ͏ 127݄8༵
▾ fuel/ ▾ app/ ▸ cache/ ▸ classes/ ▸ config/
▸ lang/ ▸ logs/ ▸ migrations/ ▸ modules/ ▸ tasks/ ▸ tmp/ ▾ vendor/ ▾ Zend/ ▾ library/ ▾ Zend/ ▸ Date/ ▸ Filter/ ▸ Loader/ ▸ Locale/ ▸ Validate/ Date.php Exception.php Filter.php Loader.php Locale.php Registry.php Validate.php ▸ views/ bootstrap.php ▸ core/ ▸ packages/ LICENSE ▸ public/ αΠτ͔ΒιʔεҰࣜΛμϯϩʔυ ԼهΛࢀߟʹඞཁͳ͚ͩΛೖΕ·͢ɻ http://framework.zend.com/manual/ja/ requirements.introduction.html#requirement s.dependencies ※ ࠓճ Ver. 1.11.12 Ͱઆ໌ ʢ2 ܥͰՄʣ 1.2.1 @wakuworks גࣜձࣾ 4-4. Λ͏ 127݄8༵
▾ fuel/ ▾ app/ ▸ cache/ ▸ classes/ ▸ config/
▸ lang/ ▸ logs/ ▸ migrations/ ▸ modules/ ▸ tasks/ ▸ tmp/ ▾ vendor/ ▾ Zend/ ▾ library/ ▾ Zend/ ▸ Date/ ▸ Filter/ ▸ Loader/ ▸ Locale/ ▸ Validate/ Date.php Exception.php Filter.php Loader.php Locale.php Registry.php Validate.php ▸ views/ bootstrap.php ▸ core/ ▸ packages/ LICENSE ▸ public/ αΠτ͔ΒιʔεҰࣜΛμϯϩʔυ ԼهΛࢀߟʹඞཁͳ͚ͩΛೖΕ·͢ɻ http://framework.zend.com/manual/ja/ requirements.introduction.html#requirement s.dependencies ※ ࠓճ Ver. 1.11.12 Ͱઆ໌ ʢ2 ܥͰՄʣ 1.2.1 @wakuworks גࣜձࣾ 4-4. Λ͏ 127݄8༵
10 set_include_path(get_include_path() 11 .':'.APPPATH.'vendor/Zend/library/'); 12 13 Autoloader::add_classes(array( 14 // Add
classes you want to override here 15 // Example: 'View' => APPPATH.'classes/view.php', 16 'Zend_Loader_Autoloader' => APPPATH 17 .'vendor/Zend/library/Zend/Loader/Autoloader.php', 18 )); 19 20 // Register the autoloader 21 Autoloader::register(); 22 Zend_Loader_Autoloader::getInstance(); APPPATH/bootstrap.php ͷಡΈࠐΈํ༷ʑ 1.2.1 @wakuworks גࣜձࣾ 4-4. Λ͏ 127݄8༵
31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(array( 33 new Zend_Filter_StringTrim(), 34
'filter' 35 )) 36 ->add_rule(array( 37 new Zend_Validate_Alpha(), 38 'isValid' 39 )); 1 <?php 2 return array( 3 'Zend_Validate_Alpha:isValid' 4 => ':labelΛਖ਼͘͠ೖྗ͍ͯͩ͘͠͞ɻ', 5 ); APPPATH/app/lang/ja/validation.php 1.2.1 @wakuworks גࣜձࣾ 4-4. Λ͏ 127݄8༵
31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(array( 33 new Zend_Filter_StringTrim(), 34
'filter' 35 )) 36 ->add_rule(array( 37 new Zend_Validate_Alpha(), 38 'isValid' 39 )); 1 <?php 2 return array( 3 'Zend_Validate_Alpha:isValid' 4 => ':labelΛਖ਼͘͠ೖྗ͍ͯͩ͘͠͞ɻ', 5 ); APPPATH/app/lang/ja/validation.php 1.2.1 @wakuworks גࣜձࣾ ϑΟϧλ 4-4. Λ͏ 127݄8༵
31 $val->add('id', 'Ϣʔβʔ ID') 32 ->add_rule(array( 33 new Zend_Filter_StringTrim(), 34
'filter' 35 )) 36 ->add_rule(array( 37 new Zend_Validate_Alpha(), 38 'isValid' 39 )); 1 <?php 2 return array( 3 'Zend_Validate_Alpha:isValid' 4 => ':labelΛਖ਼͘͠ೖྗ͍ͯͩ͘͠͞ɻ', 5 ); APPPATH/app/lang/ja/validation.php 1.2.1 @wakuworks גࣜձࣾ ϑΟϧλ όϦσʔλ 4-4. Λ͏ 127݄8༵
5.͓·͚ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
Validation Ϋϥε͔Β ϑΥʔϜΛੜͯ͠ΈΔ 5. ͓·͚ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
ઌʹݴ͏ͱ 5. ͓·͚ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
શ͘ʹཱͪ·ͤΜɻ 1.2.1 @wakuworks גࣜձࣾ 5. ͓·͚ 127݄8༵
24 $val = \Validation::forge(); 25 26 $val->add('name', '໊લ') 27 ->add_rule('trim')
28 ->add_rule('required') 29 ->add_rule('max_length', 20); 30 31 $val->add_field('email', 'ϝʔϧΞυϨε', 32 'trim|required|valid_email'); 33 34 $val->add('submit', '', array( 35 'type' => 'submit', 36 'value' => '֬ೝ', 37 )); 38 39 $form_html = $val->fieldset() 40 ->build('/form/confirm/'); 41 $this->template->set_safe('form_html', $form_html); ※ Validation Ϋϥε͕࣋ͭ Fieldset ΠϯελϯεͰੜͯ͠Δ͚ͩ 1.2.1 @wakuworks גࣜձࣾ 5. ͓·͚ 127݄8༵
େਓ͘͠ Fieldset ͔Β ੜͨ͠ํ͕͍͍ͱࢥ͏ 1.2.1 @wakuworks גࣜձࣾ 5. ͓·͚ 127݄8༵
6. ·ͱΊ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵
Validation Ұͭऔ͍ͬͯํ༷ʑɻ ʮ͜Μͳํ๏͍͚Δͷʁʯͱࢼͨ͠ࣄ͕Ҋ ֎͢ΜͳΓͱ௨ͬͨΓɻ ͜͜·ͰબࢶΛ༻ҙͯ͘͠Ε͍ͯΔ FuelPHP ΛɺվΊͯૉΒ͍͠ϑϨʔϜϫʔ Ϋͩͳͱײ͡·ͨ͠ɻ 1.2.1 @wakuworks
גࣜձࣾ 6.·ͱΊ 127݄8༵
Ҏ্ɺ ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ 1.2.1 @wakuworks גࣜձࣾ 127݄8༵