Symfony勉強会#9 form

3,788 views

Published on

Symfony勉強会#9で発表したスライド公開しました。余分なスライドを削除したなど一部改変もありますがなるべくそのままの状態でアップしました。

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,788
On SlideShare
0
From Embeds
0
Number of Embeds
2,190
Actions
Shares
0
Downloads
3
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Symfony勉強会#9 form

  1. 1. Symfonyの Formあれこれ Symfony 勉強会 #9
 岡田祐一 @okapon_pon
  2. 2. 自己紹介 • 名前:岡田祐一 (@okapon_pon) • 所属:株式会社クロコス エンジニア • 2013年∼ 日本Symfonyユーザー会 • Symfony歴 2年ほど
  3. 3. 私とSymfony • 2011年 7月 Symfony2.0 リリース そして出会う • 2011年 9月 Symfony作業場(翻訳会)に参加 • 2011年 12月 Symfony勉強会#5の前夜祭に参加 • 2012年 6月 Symfony勉強会 #6 スタッフとして参加 • 2012年 10月 Symfony温泉 (ドキュメント翻訳) • 2013年 5月 Symfony勉強会 #8 ワークショップ講師 • 2013年 11月 Symfony作業場(翻訳会)
  4. 4. 前回のワークショップ Symfony勉強会 #8
 
 サンプルコード (ver. Symfony2.2) https://github.com/okapon/symfony- workshop/wiki
  5. 5. 今日のお話 フォーム(Form)
  6. 6. 内容 • Symfony Formの特徴 • Formあれこれ (Tips)
  7. 7. Symfony Form 特徴 • 高度な抽象化 • さまざまな FormType • プレゼンテーションレイヤーの分離 • DIへの統合 • Validationの組み込み
  8. 8. 柔軟なモデルバインディング • モデルに依存しないデータバインディング • プレゼンテーション層とドメイン層の分離
  9. 9. Data Transformers • Entity Valueへ変換 • プレゼンテーション層とドメイン層の分離
  10. 10. 拡張性 • FormExtension • Symfony DIでうまく統合
  11. 11. イベント駆動 • EventDispatcherを内包 • 動的にフォームを組立可能 ! 各種イベント • PRE_SET_DATA • POST_SUBMIT など
  12. 12. Formあれこれ(Tips) このフォームどう実装したらいいの? Twigでformの値を得るには?
  13. 13. 規約への同意を確認したい 例)利用規約への同意確認
  14. 14. 規約への同意を確認したい • フォームにagreementというcheckboxフィールドを 定義 • mapped オプションfalseでデータオブジェクトには
 マッピングしない
  15. 15. 規約への同意を確認したい • バリデーションを行うコールバック関数を EventListenerに登録 ※ FormEventsやFormErrorなどのクラス をインポートする必要がある
  16. 16. カスタムFormFieldType • 再利用可能にする
  17. 17. カスタムFormFieldType 定義 ! 利用 alias指定
  18. 18. Delete機能でCSRF対策 例) 記事情報を削除する機能 Formの CSRF Protection 機能を使って CSRF対策を行う!
  19. 19.  記事情報をDBから削除するAction Delete機能でCSRF対策 CSRF対策
  20. 20. Twig関数化しとくと便利 テンプレート側 ! ! loopの中で出したい場合 deleteでCSRF対策 20
  21. 21. Twig で使える Form変数 21 各種フォーム変数へは、 form.フィールド名.vars.変数名 でアクセスできる 先ほどのCSRFの例では form._token.vars.value
  22. 22. • value: フィールドにセットされている値 • label: labelに表示される値 • id: HTMLに表示される際のid属性 • required: required属性 など Twigで使える Form変数 22 その他フォーム変数はこちら http://symfony.com/doc/current/reference/forms/ twig_reference.html#twig-reference-form-variables
  23. 23. Twigで使える Form変数 23 required属性がついているlabelタグには自動で *印をつけたい! (応用編)カスタムテンプレート化
  24. 24. Formのカスタムテンプレート 24 作成の詳しい方法はこちら http://docs.symfony.gr.jp/symfony2/cookbook/ form/form_customization.html
  25. 25. 画像を選択させたい 例)ECサイトで商品を選択させたい
  26. 26.  Twigでつかう変数を工夫する!! Delete機能でCSRF対策
  27. 27. 画像を選択させたい FormType側
  28. 28. 画像を選択させたい テンプレート側 • form.itemに forでアクセス(選択項目のFormViewを取り 出す) • form_widget(item)を使って必要なradio boxを表示する • item.vars.labelには Itemインスタンスが入ってます
  29. 29. まとめ ! • Formはモデルに依存せず柔軟にマッピングで きる • 拡張性が提供されている • FormViewが分かれば色々できるようになる!
  30. 30. ご清聴ありがとうございました

×