20090415 すばらしきSymfonyの世界へようこそ

2,089 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,089
On SlideShare
0
From Embeds
0
Number of Embeds
173
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

20090415 すばらしきSymfonyの世界へようこそ

  1. 1. すばらしき symfony の世界へ ようこそ 2009/04/15
  2. 2. はじめに <ul><ul><li>symfony は PHP 業界でもっとも有名なフレームワークの1つ </li></ul></ul><ul><ul><li>本日の目標: </li></ul></ul><ul><ul><ul><li>symfony の概要説明を行い、ノウハウを共有 </li></ul></ul></ul>
  3. 3. 目次 <ul><li>1. symfony とは? </li></ul><ul><li>2. symfony のコード概観 </li></ul><ul><li>3.インストールから Hello,World まで </li></ul>
  4. 4. <ul><li>1. symfony とは? </li></ul>
  5. 5. 1-1.symfony とは? <ul><ul><li>多くのプラットフォームにインストール可能 </li></ul></ul><ul><ul><li>MVC フレームワーク </li></ul></ul><ul><ul><li>PHP5 が大前提 </li></ul></ul><ul><ul><li>データベースベンダーに依存しない </li></ul></ul><ul><ul><li>( MySQL 、 PostgreSQL 、 Oracle 、 SQLite 対応) </li></ul></ul><ul><ul><li>O/R マッピング(実装は Propel or Doctrine で選択可能) </li></ul></ul><ul><ul><li>複雑な案件に適合する柔軟性 -> 重量級 </li></ul></ul><ul><ul><li>作者: Fabien Potencier( ファビアン・ポタンシェ ) </li></ul></ul><ul><ul><li>楽天で使用実績がある </li></ul></ul><ul><ul><li>日本語情報が少ない </li></ul></ul><ul><ul><li>日本ではコミュニティがあまり活発ではない </li></ul></ul><ul><ul><li>公式ガイドが充実している </li></ul></ul><ul><ul><li>設定はすべて YAML で書く </li></ul></ul><ul><ul><li>ビュー(テンプレート)はピュア PHP (ヘルパー関数作成) </li></ul></ul>
  6. 6. 1-2. 他のフレームワークとの 共通点 ・ Mojavi   ・ MVC フレームワークのコアクラスは    Mojavi がベースとなっている ・ Ruby on Rails (= CakePHP )   ・テンプレートヘルパー   ・スケルトン生成   (基本的なコードはツールで自動作成)
  7. 7. 1-2. symfony を理解するには? <ul><ul><li>公式ガイド 「 The Definitive Guide to symfony 」 </li></ul></ul><ul><ul><li>をとにかく読む。 </li></ul></ul><ul><ul><li> 原典 </li></ul></ul><ul><ul><li>   http://www.symfony-project.org/book/1_2/ </li></ul></ul><ul><ul><li> 日本語訳 </li></ul></ul><ul><ul><li>   http://symfony.xrea.jp/ </li></ul></ul>
  8. 8. <ul><li>2. symfony の基本要素 </li></ul>
  9. 9. 2-1. MVC パターン ・モデルレイヤー   ・ DB の抽象化   ・データアクセス ・ビューレイヤー   ・ビューロジック   ・テンプレート   ・レイアウト ・コントローラレイヤー   ・フロントコントローラ   ・アクション
  10. 10. 2-2. コードの階層構造 プロジェクトの構造 :  アプリケーション、モジュール(モデルとアクション)
  11. 11. <ul><li>3. インストールから </li></ul><ul><li>Hello,World まで。 </li></ul>
  12. 12. <ul><li>「 Hello, World! 」と表示する画面。 </li></ul><ul><ul><li>ページ  index.php </li></ul></ul><ul><li>DB </li></ul><ul><ul><li>サーバ: localhost, DB 名: temp_sandbox </li></ul></ul><ul><ul><li>TBL 名: hello_message </li></ul></ul>3-1. サンプル作成 - 完成イメージ - 投入済みデータ: waku_cd : 1 message : ‘ Hello, World!’ int waku_cd serial mid (PK) varchar(300) message
  13. 13. 3-2. インストール( Linux ) <ul><li>PEAR チャンネルに追加 </li></ul><ul><li>バージョン確認 </li></ul><ul><li>最新 stable 版のインストール </li></ul>pear channel-discover pear.symfony-project.com pear remote-list -c symfony pear install symfony/symfony
  14. 14. 3-3. プロジェクト作成 <ul><li>ディレクトリを切る (プロジェクト名: sf_test_hello ) </li></ul>$su - [apache の実行ユーザ ] $mkdir /var/www/sf_test _hello $cd /var/www/sf_test _hello $symfony generate:project sf_test _hello <ul><li>プロジェクト作成 </li></ul>
  15. 15. 3-4. DB 接続設定 <ul><li>config/database.yml を書き換える </li></ul>all: propel: class: sfPropelDatabase param: classname: PropelPDO dsn: pgsql :dbname= temp_sandbox ;host= localhost username: ****** password: ****** encoding: utf8 persistent: true pooling: false
  16. 16. 3-5. アプリケーション、 モジュール作成 <ul><li>アプリケーション作成 (名前: frontend ) </li></ul>$symfony generate:app frontend <ul><li>モジュール作成 (名前: hello ) </li></ul>$symfony generate:module frontend hello
  17. 17. 3-6. スキーマ定義、 モデルクラス自動生成 <ul><li>モデルクラス自動生成 </li></ul>$symfony propel:build-model <ul><li>接続設定した DB のスキーマ定義自動生成 </li></ul>$symfony propel:build-schema
  18. 18. 3-7. フロントコントローラ <ul><li>デフォルトのフロントコントローラ(全リクエストの唯一の入り口)が既にできているので、 </li></ul><ul><li>ルーティング </li></ul>web/index.php http://localhost/index.php/hello/index モジュール名 アクション名 <ul><li>Web サーバで DocumentRoot に設定する </li></ul>
  19. 19. 3-8. ページを追加する( 1 ) <ul><li>アクション(既にあるので埋める) </li></ul><?php class helloActions extends sfActions { public function executeIndex(sfWebRequest $request) { $wakuCd = 1; // 枠コードが1であるレコードを検索し、結果をクラスとして得る $this->message = HelloMessagePeer::getMessageByWakuCd($wakuCd); } } apps/frontend/modules/hello/actions/actions.class.php
  20. 20. 3-8. ページを追加する( 2 ) <ul><li>テンプレート追加(既にあるので埋める) </li></ul><html> ・・・ <h1><?php echo $message->getHelloMessage ?></h1> ・・・ apps/frontend/modules/hello/template/indexSuccess.class.php
  21. 21. 3-8. ページを追加する (3) <ul><li>モデルピアクラス追加(既にあるので埋める) </li></ul>class HelloMessagePeer extends BaseHelloMessagePeer { public static function getMessageByWakuCd($wakuCd) { $c = new Criteria(); $c->add(HelloMessagePeer::WAKU_CD, $wakuCd); return HelloMessagePeer::doSelectOne($c); } } lib/model/HelloMessage.php
  22. 22. 3-8. 補足: O/R マッパ Propel でのモデルレイヤー実装 <ul><li>例1:主キーでレコードを取り出すには </li></ul>$message = HelloMessagePeer::retrieveByPk(1); <ul><li>例2:全件取得するには </li></ul>$c = new Criteria(); $message = HelloMessagePeer::doSelect($c); <ul><li>例3:データを更新するには </li></ul>$message = HelloMessagePeer::retrieveByPK(1); $message->setHelloMessage('The Propel Story'); $message->save();
  23. 23. その他の機能 <ul><li>ヘルパー関数 </li></ul><ul><li>便利なビューの要素(パーシャル、コンポーネント、スロット) </li></ul><ul><li>環境切り替え(本番、テスト、開発の 3 種) </li></ul><ul><li>自動テスト </li></ul><ul><li>URL ルーティング </li></ul><ul><li>フォーム、画面遷移 </li></ul>
  24. 24. まとめ、感想 <ul><li>まとめ </li></ul>多機能(大規模開発に耐えうる) 詳しい公式ドキュメントがある 可読性の高いコードになる <ul><li>使ってみての感想 </li></ul>・バージョン間の差があるけれどドキュメントが無いのでソースを読まないといけない ・ PHP5 らしいプログラミングのきっかけになった
  25. 25. 引用資料 <ul><li>公式ガイド http://www.symfony-project.org/ </li></ul><ul><li>勉強会資料 http ://d.hatena.ne.jp/Kiske/20080412 </li></ul><ul><li>勉強会資料 http://d.hatena.ne.jp/brtRiver/20080413/1208051650 </li></ul><ul><li>楽天スピーカ資料 http://emasaka.blog65.fc2.com/blog-entry-424.html </li></ul><ul><li>バージョン間の差 http://www.exgear.jp/blog/symfony_whats_new_12/ </li></ul><ul><li>社内 wiki </li></ul>
  26. 26. <ul><li>ご清聴ありがとうございました! </li></ul>

×