Skip to main content
会場注意Symfony2が動く環境を急いで整えてください!会場無線LANが使えません野良無線の提供をしていただける方が居ましたら、前方ホワイトボードにアイパス設定を書いてくださいご協力お願いしますm(_ _)mトイレに行くにはカードキーが必要になりますスタッフにお申し付けください2011.06.04Symfony2勉強会#4 基礎編ワークショップ1
Symfony2勉強会#4基礎編ワークショップ.02011.06.04上野裕介
まずは…環境整備Standard Editionのダウンロード解凍・配置config.phpapp_dev.phpの確認2011.06.043Symfony2勉強会#4 基礎編ワークショップ
1.Standard Editionのダウンロードhttp://symfony.com/downloadSymfony2 Standard Edition BETA 3vendors一式が同梱済み環境php 5.3.2以上2011.06.044Symfony2勉強会#4 基礎編ワークショップ
2. 解凍・配置Webサーバで閲覧できる場所に解凍・配置(VirtualHost、hostsを設定)<VirtualHost *:80>ServerAdminwebmaster@localhostDocumentRoot "/Users/uechoco/dev/php_works/sf2b3/web"ServerName sf2b3.localhost    <Directory />        Order deny,allow        Deny from all        Allow from 127.0.0.1AllowOverride all        Options allDirectoryIndexapp.phpindex.htmlindex.htm    </Directory></VirtualHost>2011.06.045Symfony2勉強会#4 基礎編ワークショップ
3. config.php動作確認の単体phpたぶん問題が2つ起きるので、以下のコマンドsudochmod -R 777 app/cache/ app/logs/2011.06.046Symfony2勉強会#4 基礎編ワークショップ
4. app_dev.phpの確認app_dev.phpが見れます![RUN THE DEMO]でhello, Worldが見れます2011.06.047Symfony2勉強会#4 基礎編ワークショップ
自己紹介上野裕介(@uechoco)有限会社スグエ - エンジニア社会人2年目現在CakePHP使い元symfony 1.x使いキイロイトリ好き!!2011.06.048Symfony2勉強会#4 基礎編ワークショップ
キイロイトリグッズたち2011.06.04Symfony2勉強会#4 基礎編ワークショップ9
今回Symfony2勉強会第1部概要(30min)ワークショップ(1hour)2011.06.0410Symfony2勉強会#4 基礎編ワークショップ
Symfony2とはsymfony 1.xとは全く別物アップグレードはありませんphp 5.3.2以降名前空間DIコンテナ遅延読み込み(lazy load)バンドルDoctrine2Twig2011.06.04Symfony2勉強会#4 基礎編ワークショップ11
Symfony2を使う6つの技術的な利点Faster and less greedyUnlimited FlexibilityExpandableStable and sustainableThe joy of developingEase of use出典:The technological benefits of Symfony in 6 easy lessonshttp://symfony.com/six-good-technical-reasons2011.06.0412Symfony2勉強会#4 基礎編ワークショップSymfony2 はsymfony 1.4 より3 倍速いメモリの使用量は半分
Symfony2の現状本当は2011/3/5に正式リリース予定だったちょうど3ヶ月経ちましたSymfony2 Beta3リリースはいつ?2011.06.04Symfony2勉強会#4 基礎編ワークショップ13
ワークショップの前に解説するもの名前空間DISymfony2の処理フロー2011.06.04Symfony2勉強会#4 基礎編ワークショップ14
名前空間(1 of 4)2011.06.04Symfony2勉強会#4 基礎編ワークショップ15<?phpnamespace HTTP\Client;useHTTP\Message\Request;interfaceClientInterface{	/**	 * Sends a request.	 */functionsend(Request $request);}HTTP\Message\RequestHTTP\Client\Request
名前空間(2 of 4)2011.06.04Symfony2勉強会#4 基礎編ワークショップ16<?phpnamespace HTTP\Client;useHTTP\Message\Request asHttpRequest;interfaceClientInterface{	/**	 * Sends a request.	 */functionsend(HttpRequest $request);}
名前空間(3 of 4)2011.06.04Symfony2勉強会#4 基礎編ワークショップ17<?phpnamespace HTTP\Client;useHTTP\Message;interfaceClientInterface{	/**	 * Sends a request.	 */functionsend(Message\Request $request);}
名前空間(4 of 4)2011.06.04Symfony2勉強会#4 基礎編ワークショップ18<?phpnamespace HTTP\Client;interfaceClientInterface{	/**	 * Sends a request.	 */functionsend(\sfWebRequest $request);}
DI(1 of 4)Dependency Injection(依存性の注入)Javaでよく使われていたデザインパターンの1つDIコンテナ=依存性を注入する入れ物(外部の設定ファイルを読み込んで)(実行時に)依存性を注入(インスタンスや設定値を管理)Symfony2の内部を理解するには必須2011.06.04Symfony2勉強会#4 基礎編ワークショップ19
DI(2 of 4)依存しているコードUserクラスがSessionStorageクラスに依存している(設定を変えようにもテストしようにも面倒)2011.06.04Symfony2勉強会#4 基礎編ワークショップ20<?phpclass User{protected $storage;function __construct()	{		$this->storage = new SessionStorage(‘SESSION_ID’);	}}クラス名がハードコーディング設定値がハードコーディング
DI(3 of 4)設定変更、SessionStorageクラスの置き換え、がUserクラスに変更を加えずにできる2011.06.04Symfony2勉強会#4 基礎編ワークショップ21<?phpclass User{protected $storage;function __construct($storage)	{		$this->strorage = $storage;	}}$storage = new SessionStorage('SESSION_ID');$user = new User($storage);
DI(4 of 4)DI(コンテナ)のメリットLazy load(今まで比べて)速度向上テストしやすい拡張しやすいFabienさんのDI(コンテナ)に関する全6回の記事http://fabien.potencier.org/article/11/what-is-dependency-injectionDependency InjectionはPHP5.3になってどう変わったか?chobi_eさんがまだニートだった頃の記事http://d.hatena.ne.jp/chobi_e/20101102/12886777842011.06.04Symfony2勉強会#4 基礎編ワークショップ22
Symfony2の処理フロー(1 of 3)Webページを表示する2011.06.04Symfony2勉強会#4 基礎編ワークショップ23リクエストレスポンス
Symfony2の処理フロー(2 of 3)Symfony22011.06.04Symfony2勉強会#4 基礎編ワークショップ24Symfony2リクエストRequest内部処理レスポンスResponse
Symfony2の処理フロー(3 of 3)2011.06.04Symfony2勉強会#4 基礎編ワークショップ25Symfony2Request内部処理=KernelURIのマッチングControlleraddActionResponse
以降はワークショップです!2011.06.04Symfony2勉強会#4 基礎編ワークショップ26