Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
FuelPHP 実践 Validation
2no
July 08, 2012
4
12k
FuelPHP 実践 Validation
初発表資料
2no
July 08, 2012
Tweet
Share
More Decks by 2no
See All by 2no
最近流行り?の Middleman でモダンな Web 開発
2no
1
1.2k
Featured
See All Featured
Gamification - CAS2011
davidbonilla
75
4.1k
Git: the NoSQL Database
bkeepers
PRO
419
60k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
351
21k
JazzCon 2018 Closing Keynote - Leadership for the Reluctant Leader
reverentgeek
175
9.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
15
1.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
643
54k
VelocityConf: Rendering Performance Case Studies
addyosmani
317
22k
Reflections from 52 weeks, 52 projects
jeffersonlam
338
18k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
It's Worth the Effort
3n
177
26k
Music & Morning Musume
bryan
37
4.6k
Rebuilding a faster, lazier Slack
samanthasiow
69
7.5k
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༵