$30 off During Our Annual Pro Sale. View Details »

Dive into the Cloud with our buddy, lovely PHP!

omoon
September 28, 2013

Dive into the Cloud with our buddy, lovely PHP!

PHPでクラウドの世界へ飛び込もう。
JAWS FESTA Kansai 2013 でのスライドです。

omoon

September 28, 2013
Tweet

More Decks by omoon

Other Decks in Technology

Transcript

  1. %JWFJOUPUIF$MPVEXJUIPVSCVEEZ
    MPWFMZ1)1
    ؔ੢1)1ษڧձJO+"84'&45",BOTBJ
    4FQUFNCFSUI
    4PUBSP0.63"
    !PNPPO

    View Slide

  2. #jawsfesta
    "CPVU.F

    View Slide

  3. #jawsfesta
    "CPVU.F
    w4PUBSP0.63"

    View Slide

  4. #jawsfesta
    "CPVU.F
    w4PUBSP0.63"
    wגࣜձࣾλοϓ

    View Slide

  5. #jawsfesta
    "CPVU.F
    w4PUBSP0.63"
    wגࣜձࣾλοϓ
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ͱ͔ʣ

    View Slide

  6. #jawsfesta
    "CPVU.F
    w4PUBSP0.63"
    wגࣜձࣾλοϓ
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ͱ͔ʣ
    wMPWFOPPEMFT

    View Slide

  7. #jawsfesta
    "CPVU.F
    w4PUBSP0.63"
    wגࣜձࣾλοϓ
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ͱ͔ʣ
    wMPWFOPPEMFT
    wPNPPOPSH

    View Slide

  8. #jawsfesta
    "CPVU.F
    w4PUBSP0.63"
    wגࣜձࣾλοϓ
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ͱ͔ʣ
    wMPWFOPPEMFT
    wPNPPOPSH
    w!PNPPO

    View Slide

  9. #jawsfesta
    "CPVU.F
    w4PUBSP0.63"
    wגࣜձࣾλοϓ
    w1)1ྺ͸೥΄Ͳʢ࠷ۙ͸'VFM1)1ͱ͔ʣ
    wMPWFOPPEMFT
    wPNPPOPSH
    w!PNPPO

    View Slide

  10. #jawsfesta
    ژηϥυʔϜͱฉ͍ͯ

    View Slide

  11. #jawsfesta

    View Slide

  12. #jawsfesta
    ҆৺͠·ͨ͠

    View Slide

  13. #jawsfesta
    ࠓ೔࿩͢͜ͱ

    View Slide

  14. #jawsfesta
    ࠓ೔࿩͢͜ͱ
    wΫϥ΢υʹ·ͭΘΔݴ༿ͷ੔ཧ

    View Slide

  15. #jawsfesta
    ࠓ೔࿩͢͜ͱ
    wΫϥ΢υʹ·ͭΘΔݴ༿ͷ੔ཧ
    w୅දతΫϥ΢υ঺հ

    View Slide

  16. #jawsfesta
    ࠓ೔࿩͢͜ͱ
    wΫϥ΢υʹ·ͭΘΔݴ༿ͷ੔ཧ
    w୅දతΫϥ΢υ঺հ
    w࣮ࡍʹΫϥ΢υͰ1)1ΞϓϦέʔγϣϯΛެ։͢Δ৔߹ͷ۩ମతखॱ

    View Slide

  17. #jawsfesta
    ͱ͜ΖͰ

    View Slide

  18. #jawsfesta
    "CPVU.F

    View Slide

  19. #jawsfesta
    "CPVU.F

    View Slide

  20. #jawsfesta

    View Slide

  21. #jawsfesta

    View Slide

  22. #jawsfesta
    "CPVU.F

    View Slide

  23. #jawsfesta
    "CPVU.F

    View Slide

  24. #jawsfesta

    View Slide

  25. #jawsfesta
    Ϋϥ΢υͱ͸

    View Slide

  26. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨ

    View Slide

  27. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨ
    w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF

    View Slide

  28. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨ
    w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF

    w1BB4 1MBUGPSNBTB4FSWJDF

    View Slide

  29. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨ
    w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF

    w1BB4 1MBUGPSNBTB4FSWJDF

    w4BB4 4PGUXBSFBTB4FSWJDF

    View Slide

  30. #jawsfesta
    *BB4

    View Slide

  31. #jawsfesta
    *BB4ʢ͍͋͋ʔ͢ʣ

    View Slide

  32. #jawsfesta
    *BB4ʢ͍͋ʔ͢ʣ

    View Slide

  33. #jawsfesta
    *BB4

    View Slide

  34. #jawsfesta
    *BB4
    w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ

    View Slide

  35. #jawsfesta
    *BB4
    w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ
    w͘͞ΒͷΫϥ΢υʢIUUQDMPVETBLVSBBEKQʣ

    View Slide

  36. #jawsfesta
    *BB4
    w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ
    w͘͞ΒͷΫϥ΢υʢIUUQDMPVETBLVSBBEKQʣ
    w/*'5:$MPVEʢIUUQDMPVEOJGUZDPNʣ

    View Slide

  37. #jawsfesta
    *BB4
    w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ
    w͘͞ΒͷΫϥ΢υʢIUUQDMPVETBLVSBBEKQʣ
    w/*'5:$MPVEʢIUUQDMPVEOJGUZDPNʣ
    w8JOEPXT"[VSFʢIUUQXXXXJOEPXTB[VSFDPNKBKQ

    View Slide

  38. #jawsfesta
    1BB4

    View Slide

  39. #jawsfesta
    1BB4ʢͺ͋͢ʣ

    View Slide

  40. #jawsfesta
    1BB4

    View Slide

  41. #jawsfesta
    1BB4
    w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ

    View Slide

  42. #jawsfesta
    1BB4
    w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ
    w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ

    View Slide

  43. #jawsfesta
    1BB4
    w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ
    w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ
    w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ

    View Slide

  44. #jawsfesta
    1BB4
    w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ
    w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ
    w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ
    w %PU$MPVEʢIUUQTXXXEPUDMPVEDPNʣ

    View Slide

  45. #jawsfesta
    1BB4
    w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ
    w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ
    w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ
    w %PU$MPVEʢIUUQTXXXEPUDMPVEDPNʣ
    w &OHJOF:BSEʢIUUQXXXFOHJOFZBSEDPKQʣ

    View Slide

  46. #jawsfesta
    1BB4
    w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ
    w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ
    w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ
    w %PU$MPVEʢIUUQTXXXEPUDMPVEDPNʣ
    w &OHJOF:BSEʢIUUQXXXFOHJOFZBSEDPKQʣ
    w (PPHMF"QQ&OHJOFʢIUUQTEFWFMPQFSTHPPHMFDPNBQQFOHJOFʣ

    View Slide

  47. #jawsfesta
    1BB4
    w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ
    w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ
    w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ
    w %PU$MPVEʢIUUQTXXXEPUDMPVEDPNʣ
    w &OHJOF:BSEʢIUUQXXXFOHJOFZBSEDPKQʣ
    w (PPHMF"QQ&OHJOFʢIUUQTEFWFMPQFSTHPPHMFDPNBQQFOHJOFʣ
    w 1BHPEB#PYʢIUUQQBHPEBCPYDPN

    View Slide

  48. #jawsfesta
    4BB4ʢ͋͢͞ʣ

    View Slide

  49. #jawsfesta
    4BB4

    View Slide

  50. #jawsfesta
    4BB4
    w(NBJM

    View Slide

  51. #jawsfesta
    4BB4
    w(NBJM
    w(JU)VC#JUCVDLFU

    View Slide

  52. #jawsfesta
    4BB4
    w(NBJM
    w(JU)VC#JUCVDLFU
    wαΠϘ΢ζ-JWF IUUQTMJWFDZCP[VDPKQ

    View Slide

  53. #jawsfesta
    4BB4
    w(NBJM
    w(JU)VC#JUCVDLFU
    wαΠϘ΢ζ-JWF IUUQTMJWFDZCP[VDPKQ

    w4FOE(SJE IUUQTFOEHSJEDPN

    View Slide

  54. #jawsfesta
    4BB4
    w(NBJM
    w(JU)VC#JUCVDLFU
    wαΠϘ΢ζ-JWF IUUQTMJWFDZCP[VDPKQ

    w4FOE(SJE IUUQTFOEHSJEDPN

    w/FX3FMJD IUUQOFXSFMJDDPN

    View Slide

  55. #jawsfesta
    ຊʹ͸ॻ͚ͳ͔ͬͨ͸ͳ͠

    View Slide

  56. #jawsfesta
    4BB4

    View Slide

  57. #jawsfesta
    4BB4
    w"1*ܦ༝Ͱར༻

    View Slide

  58. #jawsfesta
    4BB4
    w"1*ܦ༝Ͱར༻
    w4%,͕༻ҙ͞Ε͍ͯΔ৔߹͕݁ߏ͋Δ

    View Slide

  59. #jawsfesta

    View Slide

  60. #jawsfesta

    View Slide

  61. #jawsfesta

    View Slide

  62. #jawsfesta

    View Slide

  63. #jawsfesta

    View Slide

  64. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨͷ͸ͳ͠Ͱͨ͠

    View Slide

  65. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨͷ͸ͳ͠Ͱͨ͠
    w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF

    View Slide

  66. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨͷ͸ͳ͠Ͱͨ͠
    w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF

    w1BB4 1MBUGPSNBTB4FSWJDF

    View Slide

  67. #jawsfesta
    Ϋϥ΢υͭͷ෼ྨͷ͸ͳ͠Ͱͨ͠
    w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF

    w1BB4 1MBUGPSNBTB4FSWJDF

    w4BB4 4PGUXBSFBTB4FSWJDF

    View Slide

  68. #jawsfesta
    ͑͑ͷʁΘΔ͍ͷʁ

    View Slide

  69. #jawsfesta
    ࣌ͱ৔߹ʹΑΔ

    View Slide

  70. #jawsfesta
    ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶ೺ʣ

    View Slide

  71. #jawsfesta
    ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶ೺ʣ
    w͙͢Ͱ͖Δ

    View Slide

  72. #jawsfesta
    ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶ೺ʣ
    w͙͢Ͱ͖Δ
    wͳ͔ͬͨ͜ͱʹͰ͖Δ

    View Slide

  73. #jawsfesta
    ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶ೺ʣ
    w͙͢Ͱ͖Δ
    wͳ͔ͬͨ͜ͱʹͰ͖Δ
    wίετ

    View Slide

  74. #jawsfesta
    ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶ೺ʣ

    View Slide

  75. #jawsfesta
    ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶ೺ʣ
    w࠷ޙͷͱ͜ΖͰ༥௨͕͖͔ͳ͍

    View Slide

  76. #jawsfesta
    ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶ೺ʣ
    w࠷ޙͷͱ͜ΖͰ༥௨͕͖͔ͳ͍
    wӳޠʂ

    View Slide

  77. #jawsfesta
    ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶ೺ʣ
    w࠷ޙͷͱ͜ΖͰ༥௨͕͖͔ͳ͍
    wӳޠʂ
    wίετ

    View Slide

  78. #jawsfesta
    ࣌ͱ৔߹ʹΑΔ

    View Slide

  79. #jawsfesta
    ·ͣ͸ͨΊͯ͠Έ·͠ΐ͏

    View Slide

  80. #jawsfesta

    View Slide

  81. #jawsfesta

    View Slide

  82. #jawsfesta
    "CPVU.F

    View Slide

  83. #jawsfesta
    "CPVU.F

    View Slide

  84. #jawsfesta
    ͨΊͯ͠ΈΔʹ͋ͨͬͯ

    View Slide

  85. #jawsfesta
    ஌͓ͬͯ͘΂͖पลٕज़

    View Slide

  86. #jawsfesta
    TTI

    View Slide

  87. #jawsfesta
    %  ssh  [email protected]  
     
     
    [email protected]'s  
    password:

    View Slide

  88. #jawsfesta
    %  ssh  [email protected]  
     
     
    [email protected]'s  
    password:

    View Slide

  89. #jawsfesta
    TTI

    View Slide

  90. #jawsfesta
    TTI
    wύεϫʔυ͸࢖Θͣʹ

    View Slide

  91. #jawsfesta
    TTI
    wύεϫʔυ͸࢖Θͣʹ
    wݤͷϖΞΛͭ͘Γ

    View Slide

  92. #jawsfesta
    TTI
    wύεϫʔυ͸࢖Θͣʹ
    wݤͷϖΞΛͭ͘Γ
    wͻͱͭ͸ൿີ

    View Slide

  93. #jawsfesta
    TTI
    wύεϫʔυ͸࢖Θͣʹ
    wݤͷϖΞΛͭ͘Γ
    wͻͱͭ͸ൿີ
    wͻͱͭ͸૬खʹ౉͢

    View Slide

  94. #jawsfesta
    TTI
    wύεϫʔυ͸࢖Θͣʹ
    wݤͷϖΞΛͭ͘Γ
    wͻͱͭ͸ൿີ
    wͻͱͭ͸૬खʹ౉͢
    w΍ΓͱΓ͢Δͱ͖ʹর߹ͯ͠

    View Slide

  95. #jawsfesta
    TTI
    wύεϫʔυ͸࢖Θͣʹ
    wݤͷϖΞΛͭ͘Γ
    wͻͱͭ͸ൿີ
    wͻͱͭ͸૬खʹ౉͢
    w΍ΓͱΓ͢Δͱ͖ʹর߹ͯ͠
    wΞΫηε͍͍ͯ͠Αʙ

    View Slide

  96. #jawsfesta

    View Slide

  97. #jawsfesta

    View Slide

  98. #jawsfesta

    View Slide

  99. #jawsfesta

    View Slide

  100. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ

    View Slide

  101. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ

    View Slide

  102. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wαʔόͱͷ௨৴͸ΩʔϖΞΛ࢖ͬͨTTI

    View Slide

  103. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wαʔόͱͷ௨৴͸ΩʔϖΞΛ࢖ͬͨTTI
    wαʔόଆͰHJUQVMM

    View Slide

  104. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wαʔόͱͷ௨৴͸ΩʔϖΞΛ࢖ͬͨTTI
    wαʔόଆͰHJUQVMM
    wDPNQPTFSJOTUBMMͳͲ

    View Slide

  105. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ

    View Slide

  106. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ

    View Slide

  107. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wखݩʹHJUDMPOF

    View Slide

  108. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wखݩʹHJUDMPOF
    w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE

    View Slide

  109. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wखݩʹHJUDMPOF
    w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE
    wαʔόͱͷ௨৴͸ΩʔϖΞΛ࢖ͬͨTTI

    View Slide

  110. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wखݩʹHJUDMPOF
    w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE
    wαʔόͱͷ௨৴͸ΩʔϖΞΛ࢖ͬͨTTI
    wαʔόଆʹHJUQVTI

    View Slide

  111. #jawsfesta
    ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ
    w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
    wखݩʹHJUDMPOF
    w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE
    wαʔόͱͷ௨৴͸ΩʔϖΞΛ࢖ͬͨTTI
    wαʔόଆʹHJUQVTI
    wDPNQPTFSJOTUBMMͳͲ

    View Slide

  112. #jawsfesta
    αϯϓϧίʔυ

    View Slide

  113. #jawsfesta
    αϯϓϧίʔυ
    wIUUQTHJUIVCDPN1)1&OHJOFFST5SBJOJOH#PPL
    QIQ@NPPL@TBNQMF

    View Slide

  114. #jawsfesta
    αϯϓϧίʔυ
    wIUUQTHJUIVCDPN1)1&OHJOFFST5SBJOJOH#PPL
    QIQ@NPPL@TBNQMF
    wσϞ͠·͢

    View Slide

  115. #jawsfesta
    HJUDMPOF
    %  git  clone  [email protected]:PHP-­‐Engineers-­‐Training-­‐Book/php_mook_sample.git
    Cloning  into  'php_mook_sample'...
    remote:  Counting  objects:  37,  done.
    remote:  Compressing  objects:  100%  (33/33),  done.
    remote:  Total  37  (delta  0),  reused  37  (delta  0)
    Receiving  objects:  100%  (37/37),  1.02  MiB  |  491  KiB/s,  done.

    View Slide

  116. #jawsfesta

    View Slide

  117. #jawsfesta
    ▾  php_mook_sample/
       ▾  bin/
               phpmig*  -­‐>  /Users/omoon/Documents/php_mook_sample/vendor/davedevelopment/phpmig/bin/phpmig
       ▾  config/
               development.php
               pagoda.php
       ▸  logs/
       ▾  migrations/
               20130711105053_CreateInitialTables.php*
       ▾  public/
           ▸  assets/
               index.php
       ▾  vendor/
           ▸  composer/
           ▸  davedevelopment/
           ▸  doctrine/
           ▸  pimple/
           ▸  psr/
           ▸  silex/
           ▸  symfony/
           ▸  twig/
               autoload.php
       ▾  views/
               index.twig
           Boxfile
           composer.json
           composer.lock
           composer.phar*
           phpmig.php

    View Slide

  118. #jawsfesta
     1  {
     2          "require":  {
     3                  "silex/silex":  "1.*",
     4                  "doctrine/dbal":  "2.2.*",
     5                  "twig/twig":  "~1.8",
     6                  "davedevelopment/phpmig":  "*"
     7          },
     8          "config":  {
     9                  "bin-­‐dir":  "bin/"
    10          }
    11  }

    View Slide

  119. #jawsfesta
    DPNQPTFSJOTUBMM

    $  curl  -­‐s  http://getcomposer.org/installer  |  php
    #!/usr/bin/env  php
    All  settings  correct  for  using  Composer
    Downloading...
    Composer  successfully  installed  to:  /Users/omoon/Documents/php_mook_sample/
    composer.phar
    Use  it:  php  composer.phar

    View Slide

  120. #jawsfesta
    DPNQPTFSJOTUBMM

    %  php  composer.phar  install
    Loading  composer  repositories  with  package  information
    ...
    ʢུʣ
    ...
    symfony/event-­‐dispatcher  suggests  installing  symfony/dependency-­‐injection  ()
    symfony/http-­‐kernel  suggests  installing  symfony/browser-­‐kit  ()
    symfony/http-­‐kernel  suggests  installing  symfony/dependency-­‐injection  ()
    symfony/http-­‐kernel  suggests  installing  symfony/finder  ()
    silex/silex  suggests  installing  symfony/browser-­‐kit  (>=2.3,<2.4-­‐dev)
    silex/silex  suggests  installing  symfony/css-­‐selector  (>=2.3,<2.4-­‐dev)
    silex/silex  suggests  installing  symfony/dom-­‐crawler  (>=2.3,<2.4-­‐dev)
    silex/silex  suggests  installing  symfony/form  (>=2.3,<2.4-­‐dev)
    Generating  autoload  files

    View Slide

  121. #jawsfesta
     1    2  require  __DIR__  .  '/../vendor/autoload.php';
     3  
     4  $app  =  new  Silex\Application();
     5  
     6  $app-­‐>register(new  Silex\Provider\TwigServiceProvider(),  array(
     7          'twig.path'  =>  __DIR__.'/../views',
     8  ));
     9  
    10  //  σʔλϕʔε઀ଓ৘ใͷಡࠐ
    11  $env  =  getenv('APP_ENV')  ?:  'development';
    12  $config  =  require  __DIR__  .  "/../config/$env.php";
    13  $app-­‐>register(new  Silex\Provider\DoctrineServiceProvider(),  array(
    14          'db.options'  =>  $config['db'],
    15  ));
    16  
    17  //  τοϓը໘
    18  $app-­‐>get('/',  function(Silex\Application  $app)  {
    19          $posts  =  $app['db']-­‐>fetchAll('
    20                  SELECT  name,  message,  unix_timestamp(created)  as  created
    21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5
    22          ');
    23          return  $app['twig']-­‐>render('index.twig',  array(
    24                  'posts'  =>  $posts,
    25          ));
    26  });
    27  
    28  //  ౤ߘॲཧ
    29  $app-­‐>post('/speak',  function(Silex\Application  $app)  {
    30          $name  =  $app['request']-­‐>get('name');
    31          $message  =  $app['request']-­‐>get('message');
    32          if  ($name  &&  $message)  {
    33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message));
    34          }
    35          return  $app-­‐>redirect('/');
    36  });
    37  
    38  $app-­‐>run();

    View Slide

  122. #jawsfesta
     1    2  require  __DIR__  .  '/../vendor/autoload.php';
     3  
     4  $app  =  new  Silex\Application();
     5  
     6  $app-­‐>register(new  Silex\Provider\TwigServiceProvider(),  array(
     7          'twig.path'  =>  __DIR__.'/../views',
     8  ));
     9  
    10  //  σʔλϕʔε઀ଓ৘ใͷಡࠐ
    11  $env  =  getenv('APP_ENV')  ?:  'development';
    12  $config  =  require  __DIR__  .  "/../config/$env.php";
    13  $app-­‐>register(new  Silex\Provider\DoctrineServiceProvider(),  array(
    14          'db.options'  =>  $config['db'],
    15  ));
    16  
    17  //  τοϓը໘
    18  $app-­‐>get('/',  function(Silex\Application  $app)  {
    19          $posts  =  $app['db']-­‐>fetchAll('
    20                  SELECT  name,  message,  unix_timestamp(created)  as  created
    21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5
    22          ');
    23          return  $app['twig']-­‐>render('index.twig',  array(
    24                  'posts'  =>  $posts,
    25          ));
    26  });
    27  
    28  //  ౤ߘॲཧ
    29  $app-­‐>post('/speak',  function(Silex\Application  $app)  {
    30          $name  =  $app['request']-­‐>get('name');
    31          $message  =  $app['request']-­‐>get('message');
    32          if  ($name  &&  $message)  {
    33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message));
    34          }
    35          return  $app-­‐>redirect('/');
    36  });
    37  
    38  $app-­‐>run();

    View Slide

  123. #jawsfesta
     1    2  require  __DIR__  .  '/../vendor/autoload.php';
     3  
     4  $app  =  new  Silex\Application();
     5  
     6  $app-­‐>register(new  Silex\Provider\TwigServiceProvider(),  array(
     7          'twig.path'  =>  __DIR__.'/../views',
     8  ));

    View Slide

  124. #jawsfesta
    10  //  σʔλϕʔε઀ଓ৘ใͷಡࠐ
    11  $env  =  getenv('APP_ENV')  ?:  'development';
    12  $config  =  require  __DIR__  .  "/../config/$env.php";
    13  $app-­‐>register(new  Silex\Provider\DoctrineServiceProvider(),  array(
    14          'db.options'  =>  $config['db'],
    15  ));

    View Slide

  125. #jawsfesta
    17  //  τοϓը໘
    18  $app-­‐>get('/',  function(Silex\Application  $app)  {
    19          $posts  =  $app['db']-­‐>fetchAll('
    20                  SELECT  name,  message,  unix_timestamp(created)  as  created
    21                  FROM  posts  ORDER  BY  created  DESC  LIMIT  5
    22          ');
    23          return  $app['twig']-­‐>render('index.twig',  array(
    24                  'posts'  =>  $posts,
    25          ));
    26  });

    View Slide

  126. #jawsfesta
     1  {
     2          "require":  {
     3                  "silex/silex":  "1.*",
     4                  "doctrine/dbal":  "2.2.*",
     5                  "twig/twig":  "~1.8",
     6                  "davedevelopment/phpmig":  "*"
     7          },
     8          "config":  {
     9                  "bin-­‐dir":  "bin/"
    10          }
    11  }

    View Slide

  127. #jawsfesta
    28  //  ౤ߘॲཧ
    29  $app-­‐>post('/speak',  function(Silex\Application  $app)  {
    30          $name  =  $app['request']-­‐>get('name');
    31          $message  =  $app['request']-­‐>get('message');
    32          if  ($name  &&  $message)  {
    33                  $app['db']-­‐>insert('posts',  array('name'  =>  $name,  'message'  =>  $message));
    34          }
    35          return  $app-­‐>redirect('/');
    36  });

    View Slide

  128. #jawsfesta
    38  $app-­‐>run();

    View Slide

  129. #jawsfesta
    ͱʹ͔ͨ͘Ίͯ͠Έ·͠ΐ͏

    View Slide

  130. #jawsfesta
    ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide