Slide 1

Slide 1 text

!IBOEN 5%%ࢹ఺͔ΒݟΔɺ 3FRVFTUΫϥεͷґଘੑ

Slide 2

Slide 2 text

!IBOEN ࣗݾ঺հ hyroky . ઐ໳ྖҬɿ ɾόοΫΤϯυ ɾϢχοτςετ झຯɿ ɾಡॻ📓ʢॐɾපݪەɾమʣ ɾےτϨ🦾

Slide 3

Slide 3 text

LaravelͷϦΫΤετΫϥε͕Ͱ͖Δ͜ͱ • ݖݶνΣοΫ • όϦσʔγϣϯ • HTTPϦΫΤετ৘ใͷอ࣋ • HTTPϨεϙϯεॲཧͷ࣮૷

Slide 4

Slide 4 text

3FTQPOTF ৘ใͷฦ٫ 3FRVFTU ৘ใͷอ࣋ 7BMJEBUJPO ஋ͷݕূ "VUIFOUJDBUJPO Ϣʔβೝূ LaravelͷRequestΫϥε͕࣋ͯΔ੹೚ 3FRVFTU $MBTT

Slide 5

Slide 5 text

όϦσʔγϣϯͷྫɿ class HogeRequest extends FormRequest { public function authorize(): bool { return true; } public function rules(): array { return [ 'name' => 'required|string|max:128', 'content' => 'required|string|max:500', ]; } public function attributes(): array { return ['name' => '໊લ','content' => '಺༰']; } protected function failedValidation(Validator $validator) { $errors = []; $validateErrors = $validator->errors()->toArray(); foreach ($validateErrors as $e) { $errors[] = $e[0]; } throw new HttpResponseException( response()->json($errors, 422) ); } } FormRequestΛܧঝ Α͋͘ΔFormRequestͷ֦ு • ೝূ • όϦσʔγϣϯϧʔϧͷఆٛ • όϦσʔγϣϯͰམͪͨͱ͖ͷ ڞ௨ॲཧ

Slide 6

Slide 6 text

͍ͭ΋ݟΔFormRequestͷܠ৭

Slide 7

Slide 7 text

ศརͳ൒໘… Ϣχοτςετ͕ ॻ͖ͮΒ͍😖

Slide 8

Slide 8 text

class HogeRequest extends FormRequest { public function authorize(): bool { return true; } public function rules(): array { return [ 'name' => 'required|string|max:128', 'content' => 'required|string|max:500', ]; } public function attributes(): array { return ['name' => '໊લ','content' => '಺༰']; } protected function failedValidation(Validator $validator) { $errors = []; $validateErrors = $validator->errors()->toArray(); foreach ($validateErrors as $e) { $errors[] = $e[0]; } throw new HttpResponseException( response()->json($errors, 422) ); } } ιʔείʔυͱςετίʔυͷྫ class HogeRequestTest extends TestCase { /** * @dataProvider dataProvider */ public function test(array $param, array, $expected): void { $request = new Request(); $actual = Validator::make( $params, $request->rules(), $request->messages() ) ->errors() ->all(); parent::assertSame($expected, $actual); } public function dataProvider(): array { return [ 'ඞਢܥ NG' => [ [], ['໊લ͕ඞਢͰ͢ɻ','಺༰͕ඞਢͰ͢ɻ'], ], ] } } ᶃ ᶄ ᶅ

Slide 9

Slide 9 text

public function authorize(): bool { return true; } ιʔείʔυͱςετίʔυͷྫ ᶃ ੹຿ͷॏෳ ೝূͷ੹຿ͱόϦσʔγϣϯͷ੹຿͕ ڞଘ͍ͯ͠Δ ςετΫϥεͷจ຺͕ϒϨΔ → υΩϡϝϯτ📄ͱͯ͠ಡΈͮΒ͍😂 → ॻ͍͍ͯͯҧ࿨ײ͕ग़Δ

Slide 10

Slide 10 text

ιʔείʔυͱςετίʔυͷྫ class HogeRequestTest extends TestCase { /** * @dataProvider dataProvider */ public function test(array $param, array, $expected): void { $request = new HogeRequest(); $actual = Validator::make( $params, $request->rules(), $request->messages() ) ->errors() ->all(); parent::assertSame($expected, $actual); } public function dataProvider(): array { return [ 'ඞਢܥ NG' => [ [], ['໊લ͕ඞਢͰ͢ɻ','಺༰͕ඞਢͰ͢ɻ'], ], ] } } ᶄ ෆཁͳґଘ ϧʔϧɾϝοηʔδͱ ࣮ߦͷॴࡏ͕ผΕ͍ͯΔ όϦσʔγϣϯ͚͍ͩͨ͠ͷʹɺ RequestΫϥεΛ ΠϯελϯεԽ͠ͳ͚Ε͹ͳΒͳ͍ → ΩϞνϫϧΠ🤮

Slide 11

Slide 11 text

class HogeRequest extends FormRequest { protected function failedValidation( Validator $validator ) { $errors = []; $validateErrors = $validator->errors() ->toArray(); foreach ($validateErrors as $e) { $errors[] = $e[0]; } throw new HttpResponseException( response()->json($errors, 422) ); } } ιʔείʔυͱςετίʔυͷྫ ᶅ ϑϨʔϜϫʔΫґଘͷڧ͞ ϝοηʔδΛՃ޻͢ΔͨΊʹɺ ܧঝݩͷ࣮૷Λؾʹ͢Δ ϑϨʔϜϫʔΫ΁ͷଥڠ → ࣮૷ͷࣗ༝౓͕Լ͕Δ protected ͷϝιουͷςετ͸ॻ͖ͮΒ͍😇

Slide 12

Slide 12 text

·ͱΊ ᶃ Ϣχοτςετ͕ॻ͖΍͍͢ઃܭ͸ߜΒΕΔ ᶄ ੹೚ͷॴࡏ͕ڞଘ͍ͯ͠ΔͱɺςετΫϥε͕ཎΉ ᶅ ԿͰ΋΍ΔΫϥε͸ɺςετ͕ͭΒ͍🥺