Your SlideShare is downloading. ×
0
symfony 1.2 を支える サブフレームワーク 第 39 回 PHP 勉強会 fivestar
あけましておめでとうございます
symfony 1.2 ネタ ということで
CakePHP1.2 に 対抗してみました
自己紹介 <ul><li>HN:  fivestar (ふぁいぶすたー) </li></ul><ul><li>名前 :  小川雄大(おがわかつひろ) </li></ul><ul><li>所属 :  アシアル株式会社 </li></ul><ul>...
サブフレームワーク って どんなのがあるの?
サブフレームワーク <ul><li>Form Framework </li></ul><ul><li>Filter Framework </li></ul><ul><li>Routing Framework </li></ul><ul><li>...
今日しゃべること <ul><li>それぞれのサブフレームワークの紹介と簡単な使い方説明など </li></ul>
Form Framework
Form Framework <ul><li>symfony 1.1 から追加 </li></ul><ul><li>入力フォームのレンダリング </li></ul><ul><ul><li>sfWidget </li></ul></ul><ul>...
symfony 1.0 まで
入力フォーム <ul><li>Form ヘルパー </li></ul>
バリデーション <ul><li>validate.yml </li></ul><ul><li>validateXxx / handleErrorXxx </li></ul>
symfony 1.2 では
Form クラス <ul><li>sfForm を継承したクラスを作成 </li></ul><ul><ul><li>sfPropelForm / sfDoctrineForm </li></ul></ul>
入力フォーム <ul><li>Widget をレンダリング </li></ul>
さらに短く <ul><li>echo $form  で一括レンダリング </li></ul><ul><ul><li>デフォルトでは <tr> で囲われる </li></ul></ul>
バリデーション・保存 <ul><li>Form に bind して validate して save </li></ul>
さらに短く <ul><li>bindAndSave </li></ul><ul><ul><li>bind -> validate -> save  の流れを一括で </li></ul></ul>
Form Framework のメリット <ul><li>アクションが簡潔に </li></ul><ul><ul><li>handleError とはお別れ </li></ul></ul><ul><li>クラスなので拡張が容易 </li></u...
Filter Framework
Filter Framework <ul><li>symfony 1.2 から追加 </li></ul><ul><li>検索用の sfForm </li></ul><ul><ul><li>sfFormFilter  extends  sfFor...
Form Framework の使い方 <ul><li>基本的な扱い方は sfForm と同じ </li></ul><ul><ul><li>configure / bind / render </li></ul></ul><ul><ul><li...
sfFormFilterDoctrine の場合
Routing Framework
Routing Framework <ul><li>symfony 1.2 から追加 </li></ul><ul><li>RESTful なルーティングのサポート </li></ul>
RESTful なルーティング? <ul><li>sf_method </li></ul><ul><ul><li>GET, POST, PUT, DELETE </li></ul></ul><ul><li>URI (リソース)と 4 つのメソッ...
例 1 <ul><li>/user  +  GET   =>  user/index </li></ul><ul><li>/user/new  +  GET  =>  user/new </li></ul><ul><li>/user  +  P...
例 2 <ul><li>/user/1  +  GET   =>  user/show?id=1 </li></ul><ul><li>/user/1/edit  +  GET  =>  user/edit?id=1 </li></ul><ul>...
sf_method <ul><li><input type=“hidden” name=“ sf_method ” /> </li></ul><ul><ul><li>自分で書くことは基本的にはない </li></ul></ul><ul><li>...
sfRoute <ul><li>sfRoute </li></ul><ul><ul><li>従来のルーティングにあたるクラス </li></ul></ul><ul><li>sfRequestRoute </li></ul><ul><ul><li...
sfObjectRoute <ul><li>sfRequestRoute  +  オブジェクト </li></ul><ul><ul><li>ルーティングからオブジェクトを取得 </li></ul></ul><ul><li>sfPropelRou...
object と list <ul><li>object </li></ul><ul><ul><li>単一のオブジェクト  (edit, show など ) </li></ul></ul><ul><ul><li>$route->getObjec...
sfObjectRouteCollection <ul><li>sfObjectRoute を複数まとめたもの </li></ul><ul><ul><li>例 1 と例 2 で書いたものがデフォルトで定義済み </li></ul></ul>
ルーティングの定義 <ul><li>apps/xxx/config/routing.yml </li></ul>
ルーティングとオブジェクト <ul><li>url_for(‘user_edit’,  $user ) </li></ul><ul><li>//  以下と同一 </li></ul><ul><li>url_for(‘@user_edit?id=’...
ルーティングとアクション <ul><li>getRoute() </li></ul><ul><ul><li>Route オブジェクトを取得 </li></ul></ul><ul><ul><li>$this->getRoute()->getObj...
定義済みルーティングの確認 <ul><li>symfony app:routes  application </li></ul>
ORM Framework
Propel
Propel <ul><li>symfony 1.1 からプラグインに </li></ul><ul><li>version 1.2 => 1.3 </li></ul><ul><li>Creole => PDO </li></ul>
The Creole Project is Dead
Doctrine
Doctrine <ul><li>symfony 1.2 から公式にバンドル </li></ul><ul><li>http://www.doctrine-project.org/ </li></ul><ul><ul><li>日本語のドキュメント...
Doctrine_Query <ul><li>直感的なクエリ操作 </li></ul>
Configuration <ul><li>ProjectConfiguration </li></ul><ul><ul><li>sfDoctrinePlugin を有効 </li></ul></ul><ul><ul><li>enableAll...
Doctrine に興味を持った方   http://d.hatena.ne.jp/Fivestar/
symfony 1.2 を 今からはじめる方へ
素晴らしいチュートリアルが お待ちしてます
ご清聴ありがとうございました End
Upcoming SlideShare
Loading in...5
×

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

3,253

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,253
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
13
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. symfony 1.2 を支える サブフレームワーク 第 39 回 PHP 勉強会 fivestar
  2. 2. あけましておめでとうございます
  3. 3. symfony 1.2 ネタ ということで
  4. 4. CakePHP1.2 に 対抗してみました
  5. 5. 自己紹介 <ul><li>HN: fivestar (ふぁいぶすたー) </li></ul><ul><li>名前 : 小川雄大(おがわかつひろ) </li></ul><ul><li>所属 : アシアル株式会社 </li></ul><ul><ul><li>http://d.hatena.ne.jp/Fivestar/ </li></ul></ul><ul><ul><li>http://wassr.jp/user/fivestar </li></ul></ul>
  6. 6. サブフレームワーク って どんなのがあるの?
  7. 7. サブフレームワーク <ul><li>Form Framework </li></ul><ul><li>Filter Framework </li></ul><ul><li>Routing Framework </li></ul><ul><li>ORM Framework </li></ul>
  8. 8. 今日しゃべること <ul><li>それぞれのサブフレームワークの紹介と簡単な使い方説明など </li></ul>
  9. 9. Form Framework
  10. 10. Form Framework <ul><li>symfony 1.1 から追加 </li></ul><ul><li>入力フォームのレンダリング </li></ul><ul><ul><li>sfWidget </li></ul></ul><ul><li>入力された値のバリデーション </li></ul><ul><ul><li>sfValidator </li></ul></ul><ul><li>CSRF 対策 </li></ul>
  11. 11. symfony 1.0 まで
  12. 12. 入力フォーム <ul><li>Form ヘルパー </li></ul>
  13. 13. バリデーション <ul><li>validate.yml </li></ul><ul><li>validateXxx / handleErrorXxx </li></ul>
  14. 14. symfony 1.2 では
  15. 15. Form クラス <ul><li>sfForm を継承したクラスを作成 </li></ul><ul><ul><li>sfPropelForm / sfDoctrineForm </li></ul></ul>
  16. 16. 入力フォーム <ul><li>Widget をレンダリング </li></ul>
  17. 17. さらに短く <ul><li>echo $form で一括レンダリング </li></ul><ul><ul><li>デフォルトでは <tr> で囲われる </li></ul></ul>
  18. 18. バリデーション・保存 <ul><li>Form に bind して validate して save </li></ul>
  19. 19. さらに短く <ul><li>bindAndSave </li></ul><ul><ul><li>bind -> validate -> save の流れを一括で </li></ul></ul>
  20. 20. Form Framework のメリット <ul><li>アクションが簡潔に </li></ul><ul><ul><li>handleError とはお別れ </li></ul></ul><ul><li>クラスなので拡張が容易 </li></ul><ul><li>入力項目とバリデーションが一目でわかる </li></ul>
  21. 21. Filter Framework
  22. 22. Filter Framework <ul><li>symfony 1.2 から追加 </li></ul><ul><li>検索用の sfForm </li></ul><ul><ul><li>sfFormFilter extends sfForm </li></ul></ul><ul><ul><li>それぞれの ORM にあわせて拡張 </li></ul></ul><ul><ul><ul><li>sfFormFilterPropel / sfFormFilterDoctrine </li></ul></ul></ul>
  23. 23. Form Framework の使い方 <ul><li>基本的な扱い方は sfForm と同じ </li></ul><ul><ul><li>configure / bind / render </li></ul></ul><ul><ul><li>widget / validator </li></ul></ul><ul><li>sfFormFilterPropel </li></ul><ul><ul><li>buildCriteria(array $values) </li></ul></ul><ul><li>sfFormFilterDoctrine </li></ul><ul><ul><li>buildQuery(array $values) </li></ul></ul>
  24. 24. sfFormFilterDoctrine の場合
  25. 25. Routing Framework
  26. 26. Routing Framework <ul><li>symfony 1.2 から追加 </li></ul><ul><li>RESTful なルーティングのサポート </li></ul>
  27. 27.
  28. 28. RESTful なルーティング? <ul><li>sf_method </li></ul><ul><ul><li>GET, POST, PUT, DELETE </li></ul></ul><ul><li>URI (リソース)と 4 つのメソッドを組み合わせて ルーティングを行う </li></ul>
  29. 29. 例 1 <ul><li>/user + GET => user/index </li></ul><ul><li>/user/new + GET => user/new </li></ul><ul><li>/user + POST => user/create </li></ul>
  30. 30. 例 2 <ul><li>/user/1 + GET => user/show?id=1 </li></ul><ul><li>/user/1/edit + GET => user/edit?id=1 </li></ul><ul><li>/user/1 + PUT => user/update?id=1 </li></ul><ul><li>/user/1 + DELETE => user/delete?id=1 </li></ul>
  31. 31. sf_method <ul><li><input type=“hidden” name=“ sf_method ” /> </li></ul><ul><ul><li>自分で書くことは基本的にはない </li></ul></ul><ul><li>$form->renderFormTag() </li></ul><ul><li>link_to(‘delete’, ‘user_delete’, $user, array( ‘method’ => ‘delete’ )) </li></ul>
  32. 32. sfRoute <ul><li>sfRoute </li></ul><ul><ul><li>従来のルーティングにあたるクラス </li></ul></ul><ul><li>sfRequestRoute </li></ul><ul><ul><li>sfRoute + sf_method </li></ul></ul>
  33. 33. sfObjectRoute <ul><li>sfRequestRoute + オブジェクト </li></ul><ul><ul><li>ルーティングからオブジェクトを取得 </li></ul></ul><ul><li>sfPropelRoute / sfDoctrineRoute </li></ul>
  34. 34. object と list <ul><li>object </li></ul><ul><ul><li>単一のオブジェクト (edit, show など ) </li></ul></ul><ul><ul><li>$route->getObject() </li></ul></ul><ul><li>list </li></ul><ul><ul><li>オブジェクトのコレクション (index など ) </li></ul></ul><ul><ul><li>$route->getObjects() </li></ul></ul>
  35. 35. sfObjectRouteCollection <ul><li>sfObjectRoute を複数まとめたもの </li></ul><ul><ul><li>例 1 と例 2 で書いたものがデフォルトで定義済み </li></ul></ul>
  36. 36. ルーティングの定義 <ul><li>apps/xxx/config/routing.yml </li></ul>
  37. 37. ルーティングとオブジェクト <ul><li>url_for(‘user_edit’, $user ) </li></ul><ul><li>// 以下と同一 </li></ul><ul><li>url_for(‘@user_edit?id=’ . $user->getId()) </li></ul><ul><li>url_for(‘user/edit?id=’ . $user->getId()) </li></ul><ul><li>object タイプのルーティングのみ有効 </li></ul><ul><li>@ はつけない </li></ul>
  38. 38. ルーティングとアクション <ul><li>getRoute() </li></ul><ul><ul><li>Route オブジェクトを取得 </li></ul></ul><ul><ul><li>$this->getRoute()->getObject() </li></ul></ul><ul><li>generateUrl() </li></ul><ul><ul><li>url_for と同じ </li></ul></ul><ul><ul><li>$this->generateUrl(‘user_show’, $user) </li></ul></ul><ul><li>メソッドの判定が不要に </li></ul>
  39. 39. 定義済みルーティングの確認 <ul><li>symfony app:routes application </li></ul>
  40. 40. ORM Framework
  41. 41. Propel
  42. 42. Propel <ul><li>symfony 1.1 からプラグインに </li></ul><ul><li>version 1.2 => 1.3 </li></ul><ul><li>Creole => PDO </li></ul>
  43. 43. The Creole Project is Dead
  44. 44. Doctrine
  45. 45. Doctrine <ul><li>symfony 1.2 から公式にバンドル </li></ul><ul><li>http://www.doctrine-project.org/ </li></ul><ul><ul><li>日本語のドキュメントも </li></ul></ul><ul><li>だいぶ安定してきた感じ </li></ul><ul><li>I   Love Doctrine </li></ul>
  46. 46. Doctrine_Query <ul><li>直感的なクエリ操作 </li></ul>
  47. 47. Configuration <ul><li>ProjectConfiguration </li></ul><ul><ul><li>sfDoctrinePlugin を有効 </li></ul></ul><ul><ul><li>enableAllPluginsExcept(array(‘sfPropelPlugin’)) </li></ul></ul><ul><li>databases.yml </li></ul><ul><ul><li>class を sfDoctrineDatabase に </li></ul></ul>
  48. 48. Doctrine に興味を持った方 http://d.hatena.ne.jp/Fivestar/
  49. 49. symfony 1.2 を 今からはじめる方へ
  50. 50.
  51. 51. 素晴らしいチュートリアルが お待ちしてます
  52. 52. ご清聴ありがとうございました End
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×