こわくないSymfony2 - 業務で使って気づいた7つの良いところ

F547a629b5f3a3d0dad8cc96810eeb5c?s=47 Go Nakanishi
October 03, 2015

こわくないSymfony2 - 業務で使って気づいた7つの良いところ

10/03に開催されたPHPカンファレンス2015にて登壇した際に発表したものです。

動画: https://www.youtube.com/watch?v=CqMILKp3Ens&feature=youtu.be&t=23m50s

===

みなさんSymfony2使ってますか?

初めてのリリースから4年が経過し、2つ目のLTSバージョンとなるSymfony2.7も今年リリースされ、ますます注目が高まっています。

私はSymfony1系で稼働していたシステムの一部を切り出しSymfony2でゼロから構築したり、新規サービスをSymfony2で構築したりとそれなりに使っています。

このセッションでは実際に業務で使ってきて良いなと感じたところを、初心者の方でも「便利そうだな」と思ってもらえるように紹介していきたいと思います。

F547a629b5f3a3d0dad8cc96810eeb5c?s=128

Go Nakanishi

October 03, 2015
Tweet

Transcript

  1. ͜Θ͘ͳ͍Symfony2 - ۀ຿Ͱ࢖ͬͯؾ͍ͮͨ7ͭͷྑ͍ͱ͜Ζ 2015/10/03 phpcon2015 גࣜձࣾVOYAGE GROUP த੢ ߽

  2. ࣗݾ঺հ • ͳ͔ʹ͠͝͏ a.k.a gomachan46 • גࣜձࣾVOYAGE GROUP ΤϯδχΞ •

    https://twitter.com/gomachan46 • https://www.facebook.com/gomachan46 • https://github.com/gomachan46
  3. ࠓ೔ ࿩͍ͨ͜͠ͱ

  4. Symfony2ͷ ྑ͍ͱ͜ΖΛ ఻͑·͢ʂ

  5. Symfony2ͱ͍͏ͱ… • ϑϧελοΫϑϨʔϜϫʔΫ • ڪΖ͘͠ڊେ • ͘͢͝ੲ͔Β͋Δ

  6. ͜Θͦ͏

  7. ͜Θ͘ͳ͍Αʂ Symfony2

  8. ࠓ೔࿩͍ͨ͜͠ͱ • Symfony2ͷྑ͍ͱ͜ΖΛ఻͑·͢ʂ • ҙ֎ͱ͜Θ͘ͳ͍ͱͬͯ΋ྑౕ͍Ͱ͢ • ଞϑϨʔϜϫʔΫͱͷൺֱ͸͠·ͤΜ • ͦͷଞٯʹϋϚͬͨͱ͜Ζ౳͸࠙਌ձͰ͆

  9. ۀ຿Ͱ͸ ԿΛ΍͍͔ͬͯͨ

  10. γεςϜϑϧϦϓϨʔε

  11. None
  12. γεςϜ • ங8೥ • PHP 5.3ܥ • symfony 1ܥ •

    ଞαʔϏε͕ಉډ
  13. ଞαʔϏε͕ಉډ

  14. None
  15. None
  16. None
  17. ڞଘ͍ͯ͠Δ͜ͱʹΑΔฐ֐ • ผαʔϏεͳͷʹӨڹΛड͚Δ • ݖݶͷద੾ͳ੾Γ෼͚͕Ͱ͖ͳ͍ • PeX • σδλϧΪϑτΦϯσϚϯυαʔϏε •

    Ϊϑτ݊ͷऔΓѻ͍
  18. γεςϜϑϧϦϓϨʔε

  19. None
  20. None
  21. ͱ͍͏Θ͚Ͱࠓ೔͸ Symfony2ͷ ྑ͍ͱ͜ΖΛ ͓఻͑͠·͢

  22. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  23. Chapter.1 • ͔ͬ͠Γͱͨ͠ϝϯςφϯε Chapter.1 ͔ͬ͠Γͱͨ͠ϝϯςφϯε

  24. ͜Θ͍ • ಥવͷαϙʔτऴྃ • ಥવͷ৽όʔδϣϯϦϦʔε • ಥવͷޙํޓ׵ੑͳ͠

  25. Symfony2ͳΒ ͜Θ͘ͳ͍Αʂ

  26. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  27. ྑ͍ͱ͜Ζᶃ ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ

  28. None
  29. ϚΠφʔόʔδϣϯ͸ 6ϲ݄͓͖ 5݄ͱ11݄

  30. ݕূ

  31. 6/3 12/3 6/1 11/29 5/30

  32. ৴པͱ࣮੷ͷ҆৺ײ εέδϡʔϧͷͨͯ΍͢͞

  33. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  34. ྑ͍ͱ͜Ζᶄ ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍

  35. ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • ηϚϯςΟοΫόʔδϣχϯάͷ࠾༻ • ΞοϓσʔτͷϑΥϩʔ͕ॆ࣮ • @deprecatedΞϊςʔγϣϯΛ༻͍ͨίʔυ্ Ͱͷ௨஌ • ඇਪ঑ػೳΛ࢖༻͍ͯ͠Δ৔߹ʹܯࠂΛߦͬͯ͘

    ΕΔ
  36. ΞοϓσʔτͷϑΥϩʔ͕ॆ࣮

  37. ΞοϓσʔτͷϑΥϩʔ͕ॆ࣮

  38. @deprecatedΞϊςʔγϣϯΛ༻͍ͨ ίʔυ্Ͱͷ௨஌

  39. ඇਪ঑ػೳΛ࢖༻͍ͯ͠Δ৔߹ʹ ܯࠂΛߦͬͯ͘ΕΔ

  40. ඇਪ঑ػೳΛ࢖༻͍ͯ͠Δ৔߹ʹ ܯࠂΛߦͬͯ͘ΕΔ

  41. Symfony2͸ ԁ׈ͳΞοϓάϨʔυΛ ࠷ॏཁࢹ

  42. ͔ͬ͠Γͱϝϯςφϯε͞Ε͍ͯͯ ΞοϓσʔτͷϑΥϩʔ΋ॆ࣮ ҆৺ͯ͠എதΛ༬͚ͯ ։ൃʹूதͰ͖Δ

  43. Chapter.2 పఈͨ͠ૄ݁߹ઃܭ Chapter.2 పఈͨ͠ૄ݁߹ઃܭ

  44. ͜Θ͍ • ϑϨʔϜϫʔΫͷෑ͍ͨϨʔϧ͔Β୤ઢ͢Δ ͱ్୺ʹ͖ͭ͘ͳΔ • ϑϨʔϜϫʔΫ͔Βड͚ΔറΓ͕ڧ͘νʔϜ ʹ߹ͬͨํ޲ʹҭͯͯߦ͖ͮΒ͍ • ґଘ͕ڧ͘ςετ࣌ʹ؆୯ʹࠩ͠ସ͑ΒΕͳ ͯ͘ࠔΔ

  45. Symfony2ͳΒ ͜Θ͘ͳ͍Αʂ

  46. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  47. ྑ͍ͱ͜Ζᶅ ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖ͯ ͍Δ

  48. None
  49. None
  50. ୯ମར༻Մೳͳίϯϙʔωϯτ ͕ू·ͬͯͰ͖͍ͯΔ • Symfony2͸খ͞ͳίϯϙʔωϯτ܈͕૊Έ߹ Θͬͯ͞ҰͭͷϑϨʔϜϫʔΫΛܗ੒͍ͯ͠ Δ • ·͞ʹૄ݁߹ • ॊೈ͞Λ΋ͬͯ։ൃͰ͖Δ

  51. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  52. ྑ͍ͱ͜Ζᶆ ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ

  53. ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ ੒͕૊ΊΔ • جຊతʹϨʔϧ͕ͳ͍ • ࡞Δ΋ͷɾඞཁੑʹ߹Θͤͯࣗ༝ʹ֦ுͯ͠ ͍͚Δ • ઃܭΛϑϨʔϜϫʔΫʹറΒΕΔ͜ͱ͕ͳ͍

  54. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  55. ྑ͍ͱ͜Ζᶇ DIίϯςφͷඪ४࠾༻

  56. None
  57. DIίϯςφͷඪ४࠾༻ • DI͕ϕʔεʹ͋Γࠩ͠ସ͑Մೳͳઃܭʹ͠΍ ͍͢ • DIίϯςφʹొ࿥͢Δʹ͸ઃఆϑΝΠϧʹه ड़͢Δ͚ͩ

  58. None
  59. DIϕʔεͷૄ݁߹ઃܭͰॊೈ ઃܭͷࣗ༝͕͋͞Γ ϑϨʔϜϫʔΫʹৼΓճ͞Εͳ͍

  60. Chapter.3 ศརͳߏ଄΍ػೳ

  61. ͭΒ͍ • (ྫ͑͹)ෳ਺ίϯτϩʔϥʔͷ࣮ߦલʹڞ௨ॲ ཧΛߦ͍͍͔ͨΒͱ͍ͬͯίϐϖ • ޮ཰ͷྑ͍։ൃΛߦ͏ͨΊͷαϙʔτπʔϧ ͕ͳ͍

  62. Symfony2ͳΒ ͭΒ͘ͳ͍Αʂ

  63. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  64. ྑ͍ͱ͜Ζᶈ ௒ڧྗͰศརͳEventListener

  65. ௒ڧྗͰศརͳEventListener • ৭ʑͳΠϕϯτʹରͯ͠ॲཧΛڬΈࠐΊΔϑο ΫϙΠϯτ͕༻ҙ͞Ε͍ͯΔ • ڞ௨ॲཧ͸EventListenerʹ·͔ͤͯݟ௨͠ͷ ྑ͍ίʔυΛॻ͚Δ

  66. Πϕϯτ • kernel.request • kernel.controller • kernel.view • kernel.response •

    …etc
  67. None
  68. None
  69. ϦΫΤετ͞Εͨ࣌ͷ IPΞυϨεΛ ϩάʹམͱͯ͠ΈΔ ྫ

  70. None
  71. None
  72. None
  73. ϩάݟͯΈΔ [2015-10-01 16:51:46] app.NOTICE: ࢼ͠ʹclientIpͰ΋ग़͠ ͯΈΔ ip: 192.168.34.1 [] []

  74. Symfony2ͷྑ͍ͱ͜Ζ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  75. ྑ͍ͱ͜Ζᶉ ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔ

  76. ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔ • ࣮ߦ͞ΕͨSQLΛݟΕΔ • explain΋ݟΕΔ • ు͖ग़͞Εͨϩά΋ݟΕΔ • ૹ৴ͨ͠formͷ಺༰΋ݟΕΔ •

    …etc
  77. DEMO

  78. EventListenerΛ׆༻ͯ͠ ៉ྷʹڞ௨ॲཧΛ ϓϩϑΝΠϥʔΛ׆༻ͯ͠ ޮ཰ͷྑ͍։ൃΛ

  79. ·ͱΊ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • పఈͨ͠ૄ݁߹ઃܭ • ศརͳߏ଄΍ػೳ

  80. ·ͱΊ • ͔ͬ͠Γͱͨ͠ϝϯςφϯε • ϦϦʔεϓϩηε͕͔ͬ͠Γ͍ͯ͠Δ • ޙํޓ׵ੑ΁ͷ഑ྀ͕खް͍ • పఈͨ͠ૄ݁߹ઃܭ •

    ୯ମར༻Մೳͳίϯϙʔωϯτ͕ू·ͬͯͰ͖͍ͯΔ • ࣗ༝౓͕ߴ͘νʔϜʹ߹ͬͨߏ੒͕૊ΊΔ • DIίϯςφͷඪ४࠾༻ • ศརͳߏ଄΍ػೳͷఏڙ • ௒ڧྗͰศརͳEventListener૚ • ։ൃ࣌ʹॏๅ͢ΔϓϩϑΝΠϥʔػೳ
  81. ͜Θ͘ͳ͍ ྑ͍ͱ͜Ζͨ͘͞Μͷ Symfony2Ͱ շదͰࣗ༝ͳ։ൃΛ

  82. ͜Θ͘ͳ͍Αʂ Symfony2