SymfonyのFormType
Formを構成するclass
ここでfieldの定義, Entityとのmapping, validationの記述などをする
基本的にはHogeTypeのような名前のclass
buildForm()の中で$builder->add()->add()->..で構成していくなど
雑に言うとfieldの集合
ややこしいが、fieldの一つ一つもFormTypeである
つまり、FormTypeの入れ子でFormが構成されている
FormType自体は、自分自身がどこで使われるかを意識してはいけない
buttonをfieldとして追加することができるが、責務上しないほうが好ましい ref buttonを追加することで、抽象度が下がり再利用しづらくなる
buttonのlabelをどうするか?などはViewの責務なので、ここに書くべきではない
既存のFormTypeを拡張する
用意されているfieldを使う
自作のfieldを定義する
それもFormTypeであるmrsekut.icon
新しいFormTypeを作って、親のFormTypeのadd()の中で指定するばいい
properties
DIできるので割と自由に他のEntityを呼べる
methods
名前揺れ過ぎ問題
ここに書いている「form class」も同じ概念 紛らわしいmrsekut.icon
fieldとして使うformのことを「Form Types」とか「Field Types」とかと揺れてるのでマジで紛らわしい ref 実際formでもありfieldでもあるから仕方がない
FormTypeを呼び出す
code:php
$post = new Post();
$form = $this->createForm(PostType::class, $post);
createNamedBuilder
createBuilderと同じでかつ、nameを指定できるbuilder
1
formのnameを指定
form_startで作成するとformタグのname属性がこれになる
たぶん
2
FormTypeを指定
FormType::classみたいにかけばいい
3
data
初期値?
4
FormTypeに対するoptionを指定
add()
field名
field type
ただのtextやurl、ラジオボタン、などの指定をする
端折ってsymfonyに推測されることもできる
これいいのか?
後から読む人にとってはわかりにくい気がするが
field type option
第2引数で指定したfield typeごとにoptionがあるのでそれを指定する
例えばselect formの選択肢の指定とか
例えばrequiredの指定とか
端折ってsymfonyに推測されることもできる
これいいのか?
後から読む人にとってはわかりにくい気がするが
Checkbouxのmappedってなに?
Setting the data_class
値の変換