SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
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 DIでうまく統合
イベント駆動
• 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はモデルに依存せず柔軟にマッピングで
きる
• 拡張性が提供されている
• FormViewが分かれば色々できるようになる!
ご清聴ありがとうございました

Mais conteúdo relacionado

Semelhante a Symfony勉強会#9 form

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 CodeHidenori 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 nagoyaHidenori Goto
 
Symfony2 introduction
Symfony2 introductionSymfony2 introduction
Symfony2 introductionHidenori 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 1Kousuke Ebihara
 
Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Hidenori Goto
 
Symfony2 intro-20111204
Symfony2 intro-20111204Symfony2 intro-20111204
Symfony2 intro-20111204Hidenori Goto
 

Semelhante a Symfony勉強会#9 form (12)

Symfony2 workshop-1
Symfony2 workshop-1Symfony2 workshop-1
Symfony2 workshop-1
 
Symfony updates
Symfony updatesSymfony updates
Symfony updates
 
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
 
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?
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
 
Symfony2 introduction
Symfony2 introductionSymfony2 introduction
Symfony2 introduction
 
日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ日本Symfonyユーザ会によるSymfony2 ワークショップ
日本Symfonyユーザ会によるSymfony2 ワークショップ
 
Using Symfony Templating On Symfony 1
Using Symfony Templating On Symfony 1Using Symfony Templating On Symfony 1
Using Symfony Templating On Symfony 1
 
Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1Doctrine2 odm-workshop-1
Doctrine2 odm-workshop-1
 
Guiなテスト環境
Guiなテスト環境Guiなテスト環境
Guiなテスト環境
 
Symfony2 intro-20111204
Symfony2 intro-20111204Symfony2 intro-20111204
Symfony2 intro-20111204
 
Symfony事例紹介
Symfony事例紹介Symfony事例紹介
Symfony事例紹介
 

Symfony勉強会#9 form