Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,184 views

Published on

  • Be the first to comment

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>

×