52
symfony 1.2 をををを ををををををををを 1 を 39 を PHP ををを fivestar

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

Embed Size (px)

Citation preview

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

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

1

第 39 回 PHP 勉強会fivestar

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

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

2

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

symfony 1.2 ネタということで

3

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

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

4

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

自己紹介

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

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

5

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

サブフレームワークって

どんなのがあるの?

6

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

サブフレームワーク

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

7

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

今日しゃべること

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

8

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

Form Framework

9

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

Form Framework

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

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

• CSRF 対策

10

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

symfony 1.0 まで

11

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

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

12

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

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

13

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

symfony 1.2 では

14

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

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

15

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

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

16

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

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

17

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

バリデーション・保存

• Form に bind して validate して save

18

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

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

19

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

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

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

20

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

Filter Framework

21

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

Filter Framework

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

22

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

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

• sfFormFilterPropel– buildCriteria(array $values)

• sfFormFilterDoctrine– buildQuery(array $values)

23

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

sfFormFilterDoctrine の場合

24

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

Routing Framework

25

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

Routing Framework

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

26

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

27

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

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

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

28

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

例 1

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

29

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

例 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

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

sf_method

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

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

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

31

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

sfRoute

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

• sfRequestRoute– sfRoute + sf_method

32

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

sfObjectRoute

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

• sfPropelRoute / sfDoctrineRoute

33

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

object と list

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

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

34

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

sfObjectRouteCollection

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

済み

35

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

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

36

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

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

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

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

37

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

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

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

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

38

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

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

39

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

ORM Framework

40

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

Propel

41

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

Propel

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

42

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

The Creole Project is Dead

43

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

Doctrine

44

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

Doctrine

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

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

I Love Doctrine

45

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

Doctrine_Query

• 直感的なクエリ操作

46

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

Configuration

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

• databases.yml– class を sfDoctrineDatabase に

47

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

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

48

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

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

49

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

50

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

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

お待ちしてます

51

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

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

End