狠狠撸

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

More Related Content

Similar to Symfony勉強会#9 form (12)

Symfony2 workshop-1
Symfony2 workshop-1Symfony2 workshop-1
Symfony2 workshop-1
Hidenori Goto
?
Symfony updates
Symfony updatesSymfony updates
Symfony updates
Katsuhiro Ogawa
?
Symfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source CodeSymfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source Code
Hidenori Goto
?
Introduction of symfony development process & What's symfony 1.3?
Introduction of symfony development process & What's symfony 1.3?Introduction of symfony development process & What's symfony 1.3?
Introduction of symfony development process & What's symfony 1.3?
Kousuke Ebihara
?
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Hidenori Goto
?
Symfony2 introduction
Symfony2 introductionSymfony2 introduction
Symfony2 introduction
Hidenori Goto
?
日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ
Shin Ohno
?
Using Symfony Templating On Symfony 1
Using Symfony Templating On Symfony 1Using Symfony Templating On Symfony 1
Using Symfony Templating On Symfony 1
Kousuke Ebihara
?
Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1
Hidenori Goto
?
骋耻颈なテスト环境
骋耻颈なテスト环境骋耻颈なテスト环境
骋耻颈なテスト环境
Shingo Nakamura
?
Symfony2 intro-20111204
Symfony2 intro-20111204Symfony2 intro-20111204
Symfony2 intro-20111204
Hidenori Goto
?
厂测尘蹿辞苍测事例绍介
厂测尘蹿辞苍测事例绍介厂测尘蹿辞苍测事例绍介
厂测尘蹿辞苍测事例绍介
Daichi Kamemoto
?
Symfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source CodeSymfony 1.4 TIPS from Openpne Source Code
Symfony 1.4 TIPS from Openpne Source Code
Hidenori Goto
?
Introduction of symfony development process & What's symfony 1.3?
Introduction of symfony development process & What's symfony 1.3?Introduction of symfony development process & What's symfony 1.3?
Introduction of symfony development process & What's symfony 1.3?
Kousuke Ebihara
?
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Hidenori Goto
?
日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ
Shin Ohno
?
Using Symfony Templating On Symfony 1
Using Symfony Templating On Symfony 1Using Symfony Templating On Symfony 1
Using Symfony Templating On Symfony 1
Kousuke Ebihara
?
Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1
Hidenori Goto
?
骋耻颈なテスト环境
骋耻颈なテスト环境骋耻颈なテスト环境
骋耻颈なテスト环境
Shingo Nakamura
?
Symfony2 intro-20111204
Symfony2 intro-20111204Symfony2 intro-20111204
Symfony2 intro-20111204
Hidenori Goto
?
厂测尘蹿辞苍测事例绍介
厂测尘蹿辞苍测事例绍介厂测尘蹿辞苍测事例绍介
厂测尘蹿辞苍测事例绍介
Daichi Kamemoto
?

Symfony勉強会#9 form