Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Laravel_メソッドインジェクション_0715

 Laravel_メソッドインジェクション_0715

02886e95c50822b9aa2552da1e518491?s=128

Takayuki

July 15, 2018
Tweet

Transcript

  1. Laravel method Injection Laravel method Injection

  2. 2 method Injectionͱ͸ 3 ࢖͍ํ Agenda 1 Laravelͷಛ௃

  3. 3 ࣗݾ঺հ ◆໊લ ླ໦ ޹೭(Suzuki Takayuki) ◆ࣗݾ঺հ ɾ1990೥ɺਆಸ઒ݝੜ·Εɻ ɾࣾձਓʹͳ͔ͬͯΒɺϓϩάϥϛϯάΛ࢝ΊΔɻ ɾ2015೥ʹϑϧεϐʔυʹೖࣾ͠ɺ2017೥ʹϑϦʔϥϯεΛ

    ΍ͬͨޙʹ2017೥11݄ʹԭೄͰىۀɻ ◆झຯ ίεϓϨɺԻָϥΠϒɺϚϥιϯେձʹग़Δɺ໺ٿ؍ઓ ◆εΩϧ ɾPHP, Symfony2,CakePHP3,Laravel5, ɾJavaScript, backbone.js,Angular4
  4. 4

  5. 5 ձࣾ঺հ ◆ձ໊ࣾ גࣜձࣾRe:Build ◆ॅॴ ԭೄݝԭೄࢢதԝ̍ஸ໨̍̒−̕ ◆ࣄۀ಺༰ ɾ೶ۀʹ͓͍ͯͷϑʔυϩεΛແ͘͢ ࣗࣾWEBαʔϏεͷاըɾ։ൃɻ ɾडୗ։ൃ

    ◆ΤϯδχΞͷಇ͖ํ ϦϞʔτϫʔΫՄೳͳࣗ༝ͳಇ͖ํΛਪ঑ͯ͠·͢ʂ
  6. 1 Laravelͷಛ௃

  7. 7 1 Laravelͷಛ௃ ɾۄͶ͗ͷΑ͏ͳߏ଄ͰϦΫΤετͱ Ϩεϙϯεͷؒʹ༷ʑͳॲཧΛڬΈࠐ Έ΍͍͢ɻ ɾόϦσʔγϣϯͳͲ΋୯ҰͷΤϯςΟ ςΟʹґଘ͢ΔͷͰ͸ͳ͘ɺForm୯ ҐͰ࣮૷Ͱ͖Δɻ MiddleWareͷྫ

    ೝ ূ ν Σ ο Ϋɺ ό Ϧ σ ʔ γ ϣ ϯɺ CSRFτʔΫϯͷνΣοΫ
  8. 8 ϥΠϒϥϦ͕ॆ࣮

  9. LaravelҎ֎ͷPHPϑϨʔϜϫʔΫ͸ݮগ܏޲ʹ͋ΔΑ͏Ͱ͢ɻ͜͜·Ͱ͸೔ຊࠃ಺͚ͩΛݟ͖ͯ·ͨ͠ɻ࣍ʹւ֎ͷݱঢ়ΛݟͯΈ·͢ɻ ೔ຊͷPHPϑϨʔϜϫʔΫͷಈ޲

  10. ೔ຊͷPHPϑϨʔϜϫʔΫͷಈ޲ ԭೄ͕ߴ͍ʂʂʂʂ

  11. ೔ຊͱશ͘ঢ়گ͕ҧ͍·͢ɻҰ൪ݕࡧ͞Ε͍ͯΔʢ࢖ΘΕ͍ͯΔʣͷ͸੨৭ͷʮLaravelʯɻLaravel্͚͕ͩঢ͠ɺͦͷଞ͕ݮগ ͍ͯ͠Δͱ͍͏఺ʹ͓͍ͯ͸೔ຊͱಉ͡܏޲Ͱ͕͢ɺݱࡏLaravel͕Ұ൪ओྲྀͱͳ͍ͬͯΔ఺͕೔ຊͱશ͘ҧ͍·͢ɻ೔ຊ΋਺೥ ஗Εͯւ֎ͷྲྀΕʹଈ͍ͯ͘͠Ͱ͠ΐ͏͔Βɺ͜ͷ··ʮCakePHPʯ͕ݮগ͠ɺʮLavelʯ͕ओྲྀʹͳ͍͖ͬͯͦ͏Ͱ͢ɻ ੈքͷPHPϑϨʔϜϫʔΫͷಈ޲ ʙੈքͰ͸͢ͰʹʮLaravelʯ͕ओྲྀʙ

  12. 3େϑϨʔϜϫʔΫͷΠϝʔδ(एׯɺओ؍΋ؚΉ) CakePHP Laravel Symfony ૣ͍ ஗͍ ௿͍ ߴ͍ ։ൃ଎౓ ֶशίετ

  13. 2 method Injectionͱ͸

  14. 1 4 DI (Dependency Injectionͷུޠ)ͱ͸ ίϯϙʔωϯτؒͷґଘؔ܎ΛϓϩάϥϜͷιʔείʔυ͔Βഉআ͠ɺ֎෦ͷઃఆϑΝ ΠϧͳͲͰ஫ೖͰ͖ΔΑ͏ʹ͢Διϑτ΢ΣΞύλʔϯͰ͋Δɻӳޠͷ಄จࣈ͔ΒDIͱ ུ͞ΕΔɻ !Ϋϥε಺ͳͲͰݻఆԽ͞Εͨ΋ͷ͕͋ΔͱԿ͕໰୊ͳͷ? ɾॊೈੑ͕ͳ͍

    ɾςετ͠ʹ͍͘ !ղܾํ๏ ʮґଘ͍ͯ͠Δ෦෼Λ֎͔Β஫ೖ͢Δʯ
  15. 1 5 DIʹ͓͚Δʮґଘੑʯͱʮ஫ೖʯͷҙຯ ɾґଘੑ (େࡶ೺ʹ)ͱ͋ΔΫϥεʹɺݻఆͷఆ਺ɺม਺ɺΠϯελϯε͕ೖͬͪΌ͍ͬͯΔঢ়ଶ ͭ·ΓͦͷΫϥε͸ɺͦͷఆ਺ɺม਺ɺΠϯελϯεʹґଘ͍ͯ͠Δ ɾ஫ೖ ͦͷΫϥεͷ֎͔Βఆ਺ɺม਺ɺΠϯελϯεΛ͋ΔΫϥεʹͿͪ͜Ή͜ͱ ஫ҙ) Ϋϥε͚ͩʹݶΒͳ͍ͱ͍͏࿩΋͋Δɻ͚Ͳɺ΄ͱΜͲͷ৔߹ΫϥεʹͳΔͷ

    ͰɺҎԼ΋Ϋϥεʹ͢Δ
  16. 1 6 DIͱ͸ ɾͭ·ΓɺԿ͕Կʹґଘ͍ͯ͠Δ? ͱ͋ΔΫϥε͕ɺݻఆͨ͠ଞͷ(ఆ਺ɺม਺ɺΫϥεͳͲ)ʹґଘ͍ͯ͠Δ ɾͲ͏͍ͨ͠ͷ? ґଘੑΛͳͨ͘͢Ίʹɺಈతʹಈ࡞Λ஫ೖ͠Α͏ͥ! ͬͯ͜ͱ ͭ·Γɺ͋ΔΫϥε಺ͷܾΊଧͪఆ਺ɺม਺ɺΠϯελϯεΛഉআͯ͠ɺ֎͔Β஫ೖ͢ Δ͜ͱͰɺಈతʹಈ࡞Λม͑ΒΕΔΑ͏ʹ͢Δ

    ɾґଘ͍ͯ͠ΔͱɺԿ͕ݏͳͷ? ֎͔Βಈతʹಈ࡞ΛมߋͰ͖ͳ͍ͷͰɺςετͮ͠Β͍ ܾΊଧͪͳͷͰɺॊೈੑ͕ͳ͘ΧελϚΠζ͠ʹ͍͘
  17. 1 7 DIͱ͸ ɾ۩ମతʹͲ͏ࠔΔͷ? ͋ΔΫϥε͚ͩςετ͍ͨ͠ͷʹதʹผͷΫϥε͕ೖ͍ͬͯΔͱςετ͠ʹ͍͘ ςετʹ͕͔͔࣌ؒΔϝιου͕தʹ͋ͬͯςετऴྃʹ͕͔͔࣌ؒΔ ɾͰɺ݁ہͲ͏͠Ζͬͯͷ? Ҿ਺ͰɺΫϥε΍ม਺Λ֎͔Βड͚औΕΔΑ͏ʹ͢Δ

  18. 1 8 Ϣχοτςετͷྫ Repository Service Controller router

  19. 1 9 Ϣχοτςετͷྫ Repository Service Controller router ϞοΫʹ͢Γସ͑Δ

  20. 2 0 DIͱ͸ ɾंͰྫ͑ͯΈΔ ʮґଘੑͷߴ͍ं͸ɺಛఆͷϝʔ ΧʔͷύʔπͰݻఆ͞ΕͪΌͬͯ ͍ͯɺΧελϚΠζͰ͖ͳ͍ंʯ ͱ͍͏͜ͱʹͳΔ

  21. 2 1 DIͷϝϦοτɾσϝϦοτ ϝϦοτ σϝϦοτ ɾιϑτ΢ΤΞͷ֊૚Λ͖Ε͍ʹ෼཭ͨ͠ઃܭ ͕༰қʹͳΔ ɾίʔυ͕؆ૉʹͳΓɺ։ൃظ͕ؒ୹͘ͳΔ ɾςετ͕༰қʹͳΓɺʮςετɾϑΝʔετʯ ʹΑΔ։ൃελΠϧΛऔΓ΍͘͢ͳΔ

    ɾ͸͡Ίʹ޻਺͕͔͔Δ৔߹͕ଟ͍ɻ ɾΫϥε΍ϑΝΠϧ͕୔ࢁͰ͖Δ ɾϓϩάϥϜͷ࣮ߦεϐʔυ͕஗͘ͳΔՄೳੑ ͕͋Δ
  22. 3 ࢖͍ํ

  23. 2 3 ΠϯδΣΫγϣϯͷछྨ ɾίϯετϥΫλΠϯδΣΫγϣϯ - αʔϏεͳͲ஫ೖ ɾϝιουΠϯδΣΫγϣϯ - όϦσʔγϣϯͳͲ

  24. 2 4 ίϯετϥΫλΠϯδΣΫγϣϯͷྫ

  25. 2 5 ࢖͍ํ

  26. 2 6 ࢖͍ํ

  27. 2 7 ͜ͷ෦෼ͰόϦσʔγϣ ϯ͕࣮ߦ͞ΕΔ

  28. 2 8 ࢖͍ํ

  29. 2 9 ࢖͍ํ