Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Dive into the Cloud with our buddy, lovely PHP!
Search
omoon
September 28, 2013
Technology
1.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dive into the Cloud with our buddy, lovely PHP!
PHPでクラウドの世界へ飛び込もう。
JAWS FESTA Kansai 2013 でのスライドです。
omoon
September 28, 2013
More Decks by omoon
See All by omoon
My First Adobe XD Plugin
omoon
0
180
LaravelでTDDを体験しよう #phpcon2018
omoon
1
4.6k
Laravel でアプリケーションを開発し Heroku で公開するまでの一部始終 #laravel_osaka
omoon
3
1.5k
Why don't you try "Query Builder"
omoon
1
3k
素晴らしき Carbon の世界 〜あなたも今日から日時マスター〜
omoon
4
14k
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon
0
200
FuelPHP をさわってみて #phpkansai
omoon
2
240
Other Decks in Technology
See All in Technology
分析AIエージェントを育てる、動く環境を育てる
codatum
1
380
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
2
430
AIに攻撃される前に、AIに攻撃させる
tsuchikazu
0
160
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
240
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
150
あなたの知らないAmazon VPC Route Server/Amazon VPC Route Server you don't know about
masakiokuda
2
240
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
280
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
130
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
320
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
7
1.6k
メルペイ 会計システム概要と歴史
mewuto
0
190
おそらく日本で唯一のDevRelインターン生として
husengs7
0
170
Featured
See All Featured
Building Adaptive Systems
keathley
44
3.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
How to make the Groovebox
asonas
2
2.5k
Facilitating Awesome Meetings
lara
57
7.2k
What's in a price? How to price your products and services
michaelherold
247
13k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Code Review Best Practice
trishagee
74
20k
The Cult of Friendly URLs
andyhume
79
7k
Fireside Chat
paigeccino
43
4.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Mind Mapping
helmedeiros
1
390
Transcript
%JWFJOUPUIF$MPVEXJUIPVSCVEEZ MPWFMZ1)1 ؔ1)1ษڧձJO+"84'&45",BOTBJ 4FQUFNCFSUI 4PUBSP0.63" !PNPPO
#jawsfesta "CPVU.F
#jawsfesta "CPVU.F w4PUBSP0.63"
#jawsfesta "CPVU.F w4PUBSP0.63" wגࣜձࣾλοϓ
#jawsfesta "CPVU.F w4PUBSP0.63" wגࣜձࣾλοϓ w1)1ྺ΄Ͳʢ࠷ۙ'VFM1)1ͱ͔ʣ
#jawsfesta "CPVU.F w4PUBSP0.63" wגࣜձࣾλοϓ w1)1ྺ΄Ͳʢ࠷ۙ'VFM1)1ͱ͔ʣ wMPWFOPPEMFT
#jawsfesta "CPVU.F w4PUBSP0.63" wגࣜձࣾλοϓ w1)1ྺ΄Ͳʢ࠷ۙ'VFM1)1ͱ͔ʣ wMPWFOPPEMFT wPNPPOPSH
#jawsfesta "CPVU.F w4PUBSP0.63" wגࣜձࣾλοϓ w1)1ྺ΄Ͳʢ࠷ۙ'VFM1)1ͱ͔ʣ wMPWFOPPEMFT wPNPPOPSH w!PNPPO
#jawsfesta "CPVU.F w4PUBSP0.63" wגࣜձࣾλοϓ w1)1ྺ΄Ͳʢ࠷ۙ'VFM1)1ͱ͔ʣ wMPWFOPPEMFT wPNPPOPSH w!PNPPO
#jawsfesta ژηϥυʔϜͱฉ͍ͯ
#jawsfesta
#jawsfesta ҆৺͠·ͨ͠
#jawsfesta ࠓ͢͜ͱ
#jawsfesta ࠓ͢͜ͱ wΫϥυʹ·ͭΘΔݴ༿ͷཧ
#jawsfesta ࠓ͢͜ͱ wΫϥυʹ·ͭΘΔݴ༿ͷཧ wදతΫϥυհ
#jawsfesta ࠓ͢͜ͱ wΫϥυʹ·ͭΘΔݴ༿ͷཧ wදతΫϥυհ w࣮ࡍʹΫϥυͰ1)1ΞϓϦέʔγϣϯΛެ։͢Δ߹ͷ۩ମతखॱ
#jawsfesta ͱ͜ΖͰ
#jawsfesta "CPVU.F
#jawsfesta "CPVU.F
#jawsfesta
#jawsfesta
#jawsfesta "CPVU.F
#jawsfesta "CPVU.F
#jawsfesta
#jawsfesta Ϋϥυͱ
#jawsfesta Ϋϥυͭͷྨ
#jawsfesta Ϋϥυͭͷྨ w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF
#jawsfesta Ϋϥυͭͷྨ w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF w1BB4 1MBUGPSNBTB4FSWJDF
#jawsfesta Ϋϥυͭͷྨ w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF w1BB4 1MBUGPSNBTB4FSWJDF w4BB4 4PGUXBSFBTB4FSWJDF
#jawsfesta *BB4
#jawsfesta *BB4ʢ͍͋͋ʔ͢ʣ
#jawsfesta *BB4ʢ͍͋ʔ͢ʣ
#jawsfesta *BB4
#jawsfesta *BB4 w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ
#jawsfesta *BB4 w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ w͘͞ΒͷΫϥυʢIUUQDMPVETBLVSBBEKQʣ
#jawsfesta *BB4 w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ w͘͞ΒͷΫϥυʢIUUQDMPVETBLVSBBEKQʣ w/*'5:$MPVEʢIUUQDMPVEOJGUZDPNʣ
#jawsfesta *BB4 w"NB[PO8FC4FSWJDFTʢIUUQBXTBNB[PODPNKQʣ w͘͞ΒͷΫϥυʢIUUQDMPVETBLVSBBEKQʣ w/*'5:$MPVEʢIUUQDMPVEOJGUZDPNʣ w8JOEPXT"[VSFʢIUUQXXXXJOEPXTB[VSFDPNKBKQ
#jawsfesta 1BB4
#jawsfesta 1BB4ʢͺ͋͢ʣ
#jawsfesta 1BB4
#jawsfesta 1BB4 w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ
#jawsfesta 1BB4 w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ
#jawsfesta 1BB4 w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ
#jawsfesta 1BB4 w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ w %PU$MPVEʢIUUQTXXXEPUDMPVEDPNʣ
#jawsfesta 1BB4 w "QQ'PHʢIUUQTXXXBQQGPHDPNʣ w "84&MBTUJD#FBOTUBMLʢIUUQBXTBNB[PODPNKQFMBTUJDCFBOTUBMLʣ w DMPVE$POUSPMʢIUUQTXXXDMPVEDPOUSPMDPNʣ w %PU$MPVEʢIUUQTXXXEPUDMPVEDPNʣ
w &OHJOF:BSEʢIUUQXXXFOHJOFZBSEDPKQʣ
#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ʣ
#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
#jawsfesta 4BB4ʢ͋͢͞ʣ
#jawsfesta 4BB4
#jawsfesta 4BB4 w(NBJM
#jawsfesta 4BB4 w(NBJM w(JU)VC#JUCVDLFU
#jawsfesta 4BB4 w(NBJM w(JU)VC#JUCVDLFU wαΠϘζ-JWF IUUQTMJWFDZCP[VDPKQ
#jawsfesta 4BB4 w(NBJM w(JU)VC#JUCVDLFU wαΠϘζ-JWF IUUQTMJWFDZCP[VDPKQ w4FOE(SJE IUUQTFOEHSJEDPN
#jawsfesta 4BB4 w(NBJM w(JU)VC#JUCVDLFU wαΠϘζ-JWF IUUQTMJWFDZCP[VDPKQ w4FOE(SJE IUUQTFOEHSJEDPN w/FX3FMJD IUUQOFXSFMJDDPN
#jawsfesta ຊʹॻ͚ͳ͔ͬͨͳ͠
#jawsfesta 4BB4
#jawsfesta 4BB4 w"1*ܦ༝Ͱར༻
#jawsfesta 4BB4 w"1*ܦ༝Ͱར༻ w4%,͕༻ҙ͞Ε͍ͯΔ߹͕݁ߏ͋Δ
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta Ϋϥυͭͷྨͷͳ͠Ͱͨ͠
#jawsfesta Ϋϥυͭͷྨͷͳ͠Ͱͨ͠ w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF
#jawsfesta Ϋϥυͭͷྨͷͳ͠Ͱͨ͠ w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF w1BB4 1MBUGPSNBTB4FSWJDF
#jawsfesta Ϋϥυͭͷྨͷͳ͠Ͱͨ͠ w*BB4 *OGSBTUSVDUVSFBTB4FSWJDF w1BB4 1MBUGPSNBTB4FSWJDF w4BB4 4PGUXBSFBTB4FSWJDF
#jawsfesta ͑͑ͷʁΘΔ͍ͷʁ
#jawsfesta ࣌ͱ߹ʹΑΔ
#jawsfesta ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶʣ
#jawsfesta ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶʣ w͙͢Ͱ͖Δ
#jawsfesta ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶʣ w͙͢Ͱ͖Δ wͳ͔ͬͨ͜ͱʹͰ͖Δ
#jawsfesta ߟ͑ΒΕΔϝϦοτʢ͔ͳΓେࡶʣ w͙͢Ͱ͖Δ wͳ͔ͬͨ͜ͱʹͰ͖Δ wίετ
#jawsfesta ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶʣ
#jawsfesta ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶʣ w࠷ޙͷͱ͜ΖͰ༥௨͕͖͔ͳ͍
#jawsfesta ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶʣ w࠷ޙͷͱ͜ΖͰ༥௨͕͖͔ͳ͍ wӳޠʂ
#jawsfesta ߟ͑ΒΕΔσϝϦοτʢ͔ͳΓେࡶʣ w࠷ޙͷͱ͜ΖͰ༥௨͕͖͔ͳ͍ wӳޠʂ wίετ
#jawsfesta ࣌ͱ߹ʹΑΔ
#jawsfesta ·ͣͨΊͯ͠Έ·͠ΐ͏
#jawsfesta
#jawsfesta
#jawsfesta "CPVU.F
#jawsfesta "CPVU.F
#jawsfesta ͨΊͯ͠ΈΔʹ͋ͨͬͯ
#jawsfesta ͓͖ͬͯ͘पลٕज़
#jawsfesta TTI
#jawsfesta % ssh
[email protected]
[email protected]
's password:
#jawsfesta % ssh
[email protected]
[email protected]
's password:
#jawsfesta TTI
#jawsfesta TTI wύεϫʔυΘͣʹ
#jawsfesta TTI wύεϫʔυΘͣʹ wݤͷϖΞΛͭ͘Γ
#jawsfesta TTI wύεϫʔυΘͣʹ wݤͷϖΞΛͭ͘Γ wͻͱͭൿີ
#jawsfesta TTI wύεϫʔυΘͣʹ wݤͷϖΞΛͭ͘Γ wͻͱͭൿີ wͻͱͭ૬खʹ͢
#jawsfesta TTI wύεϫʔυΘͣʹ wݤͷϖΞΛͭ͘Γ wͻͱͭൿີ wͻͱͭ૬खʹ͢ wΓͱΓ͢Δͱ͖ʹর߹ͯ͠
#jawsfesta TTI wύεϫʔυΘͣʹ wݤͷϖΞΛͭ͘Γ wͻͱͭൿີ wͻͱͭ૬खʹ͢ wΓͱΓ͢Δͱ͖ʹর߹ͯ͠ wΞΫηε͍͍ͯ͠Αʙ
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wαʔόͱͷ௨৴ΩʔϖΞΛͬͨTTI
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wαʔόͱͷ௨৴ΩʔϖΞΛͬͨTTI wαʔόଆͰHJUQVMM
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ"84ʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wαʔόͱͷ௨৴ΩʔϖΞΛͬͨTTI wαʔόଆͰHJUQVMM wDPNQPTFSJOTUBMMͳͲ
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wखݩʹHJUDMPOF
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wखݩʹHJUDMPOF w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wखݩʹHJUDMPOF w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE wαʔόͱͷ௨৴ΩʔϖΞΛͬͨTTI
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wखݩʹHJUDMPOF w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE wαʔόͱͷ௨৴ΩʔϖΞΛͬͨTTI wαʔόଆʹHJUQVTI
#jawsfesta ίʔυͷσϓϩΠͷ̍Ҋʢ1BHPEB#PYʣ w(JUͷϦϞʔτϦϙδτϦΛ࡞Δ wखݩʹHJUDMPOF w1BHPEB#PYͷϦϙδτϦΛHJUSFNPUFBEE wαʔόͱͷ௨৴ΩʔϖΞΛͬͨTTI wαʔόଆʹHJUQVTI wDPNQPTFSJOTUBMMͳͲ
#jawsfesta αϯϓϧίʔυ
#jawsfesta αϯϓϧίʔυ wIUUQTHJUIVCDPN1)1&OHJOFFST5SBJOJOH#PPL QIQ@NPPL@TBNQMF
#jawsfesta αϯϓϧίʔυ wIUUQTHJUIVCDPN1)1&OHJOFFST5SBJOJOH#PPL QIQ@NPPL@TBNQMF wσϞ͠·͢
#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.
#jawsfesta
#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
#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 }
#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
#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
#jawsfesta 1 <?php 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();
#jawsfesta 1 <?php 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();
#jawsfesta 1 <?php 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 ));
#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 ));
#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 });
#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 }
#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 });
#jawsfesta 38 $app-‐>run();
#jawsfesta ͱʹ͔ͨ͘Ίͯ͠Έ·͠ΐ͏
#jawsfesta ͋Γ͕ͱ͏͍͟͝·ͨ͠