symfony勉強会#9 form

30
Symfonyの Formあれこれ Symfony 勉強会 #9 岡田祐一 @okapon_pon

Upload: yuichi-okada

Post on 11-Jul-2015

2.817 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Symfony勉強会#9 form

Symfonyの Formあれこれ

Symfony 勉強会 #9岡田祐一 @okapon_pon

Page 2: Symfony勉強会#9 form

自己紹介

• 名前:岡田祐一 (@okapon_pon)

• 所属:株式会社クロコス エンジニア

• 2013年~ 日本Symfonyユーザー会

• Symfony歴 2年ほど

Page 3: Symfony勉強会#9 form

私と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作業場(翻訳会)

Page 4: Symfony勉強会#9 form

前回のワークショップ

Symfony勉強会 #8サンプルコード (ver. Symfony2.2) https://github.com/okapon/symfony-workshop/wiki

Page 5: Symfony勉強会#9 form

今日のお話

フォーム(Form)

Page 6: Symfony勉強会#9 form

内容• Symfony Formの特徴

• Formあれこれ (Tips)

Page 7: Symfony勉強会#9 form

Symfony Form 特徴• 高度な抽象化

• さまざまな FormType

• プレゼンテーションレイヤーの分離

• DIへの統合

• Validationの組み込み

Page 8: Symfony勉強会#9 form

柔軟なモデルバインディング• モデルに依存しないデータバインディング

• プレゼンテーション層とドメイン層の分離

Page 9: Symfony勉強会#9 form

Data Transformers• Entity ⇔ Valueへ変換

• プレゼンテーション層とドメイン層の分離

Page 10: Symfony勉強会#9 form

拡張性• FormExtension

• Symfony DIでうまく統合

Page 11: Symfony勉強会#9 form

イベント駆動

• EventDispatcherを内包 • 動的にフォームを組立可能

!

各種イベント • PRE_SET_DATA • POST_SUBMIT など

Page 12: Symfony勉強会#9 form

Formあれこれ(Tips)

このフォームどう実装したらいいの? Twigでformの値を得るには?

Page 13: Symfony勉強会#9 form

規約への同意を確認したい例)利用規約への同意確認

Page 14: Symfony勉強会#9 form

規約への同意を確認したい

• フォームにagreementというcheckboxフィールドを定義

• mapped オプションfalseでデータオブジェクトにはマッピングしない

Page 15: Symfony勉強会#9 form

規約への同意を確認したい

• バリデーションを行うコールバック関数をEventListenerに登録

※ FormEventsやFormErrorなどのクラスをインポートする必要がある

Page 16: Symfony勉強会#9 form

カスタムFormFieldType• 再利用可能にする

Page 17: Symfony勉強会#9 form

カスタムFormFieldType定義

!

利用 alias指定

Page 18: Symfony勉強会#9 form

Delete機能でCSRF対策例) 記事情報を削除する機能

Formの CSRF Protection 機能を使ってCSRF対策を行う!

Page 19: Symfony勉強会#9 form

 記事情報をDBから削除するAction

Delete機能でCSRF対策

CSRF対策

Page 20: Symfony勉強会#9 form

Twig関数化しとくと便利

テンプレート側 !

!

loopの中で出したい場合

deleteでCSRF対策

20

Page 21: Symfony勉強会#9 form

Twig で使える Form変数

21

各種フォーム変数へは、

form.フィールド名.vars.変数名

でアクセスできる

先ほどのCSRFの例では form._token.vars.value

Page 22: Symfony勉強会#9 form

• 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

Page 23: Symfony勉強会#9 form

Twigで使える Form変数

23

required属性がついているlabelタグには自動で *印をつけたい!

(応用編)カスタムテンプレート化

Page 24: Symfony勉強会#9 form

Formのカスタムテンプレート

24

作成の詳しい方法はこちら http://docs.symfony.gr.jp/symfony2/cookbook/form/form_customization.html

Page 25: Symfony勉強会#9 form

画像を選択させたい例)ECサイトで商品を選択させたい

Page 26: Symfony勉強会#9 form

 Twigでつかう変数を工夫する!!

Delete機能でCSRF対策

Page 27: Symfony勉強会#9 form

画像を選択させたいFormType側

Page 28: Symfony勉強会#9 form

画像を選択させたいテンプレート側

• form.itemに forでアクセス(選択項目のFormViewを取り出す)

• form_widget(item)を使って必要なradio boxを表示する • item.vars.labelには Itemインスタンスが入ってます

Page 29: Symfony勉強会#9 form

まとめ!

• Formはモデルに依存せず柔軟にマッピングできる

• 拡張性が提供されている

• FormViewが分かれば色々できるようになる!

Page 30: Symfony勉強会#9 form

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