
mapped:false
/ property_path:false
$form->get('foo')->setRequired(false)
b. イベントで
required
オプション変更PRE_SET_DATA
で初期値を見て分岐csrf_protection:false
allow_extra_fields:true
で未知キー無視error_bubbling:true
error_mapping
label_format:'form.%name%'
+ translation_domain:'admin'
%name%
がフィールド名に置換entry_options['label'=>false]
+ prototype:true
/親:by_reference:false
allow_add
, allow_delete
post_max_size_message:'ファイルが大きすぎます'
FileType
の constraints
も要追加setMethod('POST')
+ hidden _method
$form->setAction($url)
setAction()
は Builder でも可validation_groups => fn(FormInterface $f) => $f->getData()->isDraft() ? ['Draft'] : ['Default']
row_attr
/ label_attr
または $builder->setAttribute()
getter:'isPublished'
, setter:'markPublished'
empty_data:''
+ trim:false
getBlockPrefix()
を上書きsetValidationGroups()
/POST_SUBMIT
で再評価$builder->setAttribute('enctype','multipart/form-data')
FileType
があれば自動設定されるが念のためaddXxx()
実装 + by_reference:false
cascade
も確認validation_groups:['Partial']
fetch
→ JSON エラー返却label_html:true
, help_html:true
も使えるform_attr:['novalidate'=>'novalidate']
add('group', FormType::class,['label'=>false])
内に子フィールドcompound:true
でネスト可能choice_loader:null
+ 配列順に choices
指定preferred_choices
で先頭固定placeholder:'---- 選択 ----'
required:false
にしないと選択不可years: range(date('Y'), date('Y')+5)
query_builder
で WHERE e.deletedAt IS NULL
translation_domain:'errors'
+ 各 invalid_message
はキーで指定disabled:true
setDataMapper(new CustomMapper())
attr:{id:'my_custom_id'}
addEventSubscriber(new DynamicFieldSubscriber($repo))
PRE_SET_DATA
でループ追加Views: 2