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