symfony 1.2を支えるサブフレームワーク

Post on 20-Jun-2015

3262 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

Transcript

symfony 1.2 を支えるサブフレームワーク

1

第 39 回 PHP 勉強会fivestar

あけましておめでとうございます

2

symfony 1.2 ネタということで

3

CakePHP1.2 に対抗してみました

4

自己紹介

• HN: fivestar (ふぁいぶすたー)• 名前 : 小川雄大(おがわかつひろ)• 所属 : アシアル株式会社

http://d.hatena.ne.jp/Fivestar/http://wassr.jp/user/fivestar

5

サブフレームワークって

どんなのがあるの?

6

サブフレームワーク

• Form Framework• Filter Framework• Routing Framework• ORM Framework

7

今日しゃべること

• それぞれのサブフレームワークの紹介と簡単な使い方説明など

8

Form Framework

9

Form Framework

• symfony 1.1 から追加• 入力フォームのレンダリング– sfWidget

• 入力された値のバリデーション– sfValidator

• CSRF 対策

10

symfony 1.0 まで

11

入力フォーム• Form ヘルパー

12

バリデーション• validate.yml• validateXxx / handleErrorXxx

13

symfony 1.2 では

14

Form クラス• sfForm を継承したクラスを作成– sfPropelForm / sfDoctrineForm

15

入力フォーム• Widget をレンダリング

16

さらに短く• echo $form で一括レンダリング–デフォルトでは <tr> で囲われる

17

バリデーション・保存

• Form に bind して validate して save

18

さらに短く• bindAndSave– bind -> validate -> save の流れを一括で

19

Form Framework のメリット• アクションが簡潔に– handleError とはお別れ

• クラスなので拡張が容易• 入力項目とバリデーションが一目でわか

20

Filter Framework

21

Filter Framework

• symfony 1.2 から追加• 検索用の sfForm– sfFormFilter extends sfForm–それぞれの ORM にあわせて拡張• sfFormFilterPropel / sfFormFilterDoctrine

22

Form Framework の使い方• 基本的な扱い方は sfForm と同じ– configure / bind / render– widget / validator

• sfFormFilterPropel– buildCriteria(array $values)

• sfFormFilterDoctrine– buildQuery(array $values)

23

sfFormFilterDoctrine の場合

24

Routing Framework

25

Routing Framework

• symfony 1.2 から追加• RESTful なルーティングのサポート

26

27

RESTful なルーティング?• sf_method– GET, POST, PUT, DELETE

• URI (リソース)と 4 つのメソッドを組み合わせてルーティングを行う

28

例 1

• /user + GET => user/index• /user/new + GET => user/new• /user + POST => user/create

29

例 2

• /user/1 + GET => user/show?id=1• /user/1/edit + GET => user/edit?id=1• /user/1 + PUT => user/update?id=1• /user/1 + DELETE => user/delete?id=1

30

sf_method

• <input type=“hidden” name=“sf_method” />–自分で書くことは基本的にはない

• $form->renderFormTag()• link_to(‘delete’, ‘user_delete’, $user,

array(‘method’ => ‘delete’))

31

sfRoute

• sfRoute–従来のルーティングにあたるクラス

• sfRequestRoute– sfRoute + sf_method

32

sfObjectRoute

• sfRequestRoute + オブジェクト–ルーティングからオブジェクトを取得

• sfPropelRoute / sfDoctrineRoute

33

object と list

• object–単一のオブジェクト (edit, show など )– $route->getObject()

• list–オブジェクトのコレクション (index など )– $route->getObjects()

34

sfObjectRouteCollection

• sfObjectRoute を複数まとめたもの–例 1 と例 2 で書いたものがデフォルトで定義

済み

35

ルーティングの定義• apps/xxx/config/routing.yml

36

ルーティングとオブジェクト

url_for(‘user_edit’, $user)// 以下と同一url_for(‘@user_edit?id=’ . $user->getId())url_for(‘user/edit?id=’ . $user->getId())

• object タイプのルーティングのみ有効• @ はつけない

37

ルーティングとアクション• getRoute()– Route オブジェクトを取得– $this->getRoute()->getObject()

• generateUrl()– url_for と同じ– $this->generateUrl(‘user_show’, $user)

• メソッドの判定が不要に

38

定義済みルーティングの確認• symfony app:routes application

39

ORM Framework

40

Propel

41

Propel

• symfony 1.1 からプラグインに• version 1.2 => 1.3• Creole => PDO

42

The Creole Project is Dead

43

Doctrine

44

Doctrine

• symfony 1.2 から公式にバンドル• http://www.doctrine-project.org/–日本語のドキュメントも

• だいぶ安定してきた感じ

I Love Doctrine

45

Doctrine_Query

• 直感的なクエリ操作

46

Configuration

• ProjectConfiguration– sfDoctrinePlugin を有効– enableAllPluginsExcept(array(‘sfPropelPlugin’))

• databases.yml– class を sfDoctrineDatabase に

47

Doctrine に興味を持った方 http://d.hatena.ne.jp/Fivestar/

48

symfony 1.2 を今からはじめる方へ

49

50

素晴らしいチュートリアルが

お待ちしてます

51

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

End

top related