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

26
1 すすすすす symfony すすすす すすすす 2009/04/15

Upload: hiromu-shioya

Post on 24-May-2015

1.894 views

Category:

Documents


2 download

TRANSCRIPT

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

1

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

2009/04/15

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

2

はじめに

– symfony は PHP 業界でもっとも有名なフレームワークの1つ

– 本日の目標:symfony の概要説明を行い、ノウハウを共

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

3

目次

1. symfony とは?

2. symfony のコード概観

3.インストールから Hello,World まで

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

4

1. symfony とは?

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

5

1-1.symfony とは? – 多くのプラットフォームにインストール可能 – MVC フレームワーク– PHP5 が大前提– データベースベンダーに依存しない( MySQL 、 PostgreSQL 、 Oracle 、 SQLite 対応)– O/R マッピング(実装は Propel or Doctrine で選択可能)– 複雑な案件に適合する柔軟性 → 重量級– 作者: Fabien Potencier( ファビアン・ポタンシェ )– 楽天で使用実績がある– 日本語情報が少ない– 日本ではコミュニティがあまり活発ではない– 公式ガイドが充実している– 設定はすべて YAML で書く– ビュー(テンプレート)はピュア PHP (ヘルパー関数作成)

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

6

1-2. 他のフレームワークとの共通点

・ Mojavi  ・ MVC フレームワークのコアクラスは   Mojavi がベースとなっている

・ Ruby on Rails (= CakePHP )  ・テンプレートヘルパー  ・スケルトン生成  (基本的なコードはツールで自動作成)

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

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の世界へようこそ

8

2. symfony の基本要素

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

9

2-1. MVC パターン・モデルレイヤー  ・ DB の抽象化  ・データアクセス・ビューレイヤー  ・ビューロジック  ・テンプレート  ・レイアウト・コントローラレイヤー  ・フロントコントローラ  ・アクション

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

10

2-2. コードの階層構造

プロジェクトの構造 :

 アプリケーション、モジュール(モデルとアクション)

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

11

3. インストールから Hello,World まで。

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

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の世界へようこそ

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の世界へようこそ

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の世界へようこそ

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の世界へようこそ

16

3-5. アプリケーション、モジュール作成

• アプリケーション作成 (名前: frontend )

$symfony generate:app frontend

• モジュール作成 (名前: hello )

$symfony generate:module frontend hello

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

17

3-6. スキーマ定義、モデルクラス自動生成

• モデルクラス自動生成

$symfony propel:build-model

• 接続設定した DB のスキーマ定義自動生成

$symfony propel:build-schema

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

18

3-7. フロントコントローラ

• デフォルトのフロントコントローラ(全リクエストの唯一の入り口)が既にできているので、

• ルーティング

web/index.php

http://localhost/index.php/hello/index

モジュール名 アクション名

• Web サーバで DocumentRoot に設定する

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

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の世界へようこそ

20

3-8. ページを追加する( 2 )

• テンプレート追加(既にあるので埋める)

<html>

・・・<h1><?php echo $message->getHelloMessage ?></h1>

・・・

apps/frontend/modules/hello/template/indexSuccess.class.php

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

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の世界へようこそ

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の世界へようこそ

23

その他の機能

• ヘルパー関数• 便利なビューの要素(パーシャル、コン

ポーネント、スロット)• 環境切り替え(本番、テスト、開発の 3

種)• 自動テスト• URL ルーティング• フォーム、画面遷移

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

24

まとめ、感想

• まとめ多機能(大規模開発に耐えうる)詳しい公式ドキュメントがある可読性の高いコードになる

• 使ってみての感想・バージョン間の差があるけれどドキュメントが無いのでソースを読まないといけない・ PHP5 らしいプログラミングのきっかけになった

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

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の世界へようこそ

26

• ご清聴ありがとうございました!