Symfony/Twig:如何将附加数据传递给表单? [英] Symfony/Twig: how to pass additional data to a form?
问题描述
我正在寻找一种方法来管理 MyFormType.php
中的所有表单数据.到目前为止,我已经有了 label
和 placeholder
,但我想存储一个额外的字符串,例如更多详细信息".
AppBundle\Form\Type\MyFormType.php
//...$builder->add('fieldname', TextType::class, ['标签' =>'我的标签','属性' =>['占位符' =>'我的占位符'],'附加数据' =>['信息' =>'更多信息]//<- ???]);//...
myForm.html.twig
标签:{{form_label(form.fieldname)}}文本字段:{{form_widget(form.fieldname)}}信息:{{form_additionalData(form.fieldname, 'info')}} {# ???#}
我正在考虑通过 data-*
属性传递数据,例如:
//...'属性' =>['数据信息' =>'更多信息']//...
但是如何在没有错误解决方法的情况下以良好的方式读取数据?
针对这个问题有什么最佳/好的做法吗?
提前致谢!
通过使用 表单如果它是您的应用程序中的常见用例,那么类型扩展可能是一种方法:
# src/AppBundle/Form/Extension/FormTypeExtension.php类 FormTypeExtension 扩展 AbstractTypeExtension{公共函数 buildView(FormView $view, FormInterface $form, array $options){foreach ($options['extra_data'] as $name => $data) {$dataName = sprintf('data-%s', $name);$view->vars['attr'][$dataName] = json_encode($data);}}公共函数 configureOptions(OptionsResolver $resolver){$resolver->setDefaults(array('extra_data' => array()));$resolver->setAllowedTypes('extra_data', 'array');}公共函数 getExtendedType(){返回 FormType::class;}}
注册您的表单类型扩展:
# app/config/services.yml服务:app.form.extension.form_type:类:AppBundle\Form\Extension\FormTypeExtension标签:- { 名称:form.type_extension,extended_type:Symfony\Component\Form\Extension\Core\Type\FormType }
如果:
$form->add('name', TextType::class, array('额外数据' =>大批('富' =>'酒吧','巴兹' =>数组('姓名' => '约翰'),),));
那么:
<input type="text" id="form_name" name="form[name]" data-foo=""bar"" data-baz="{"name": "john"}"/>
<块引用>
但是如何在没有错误解决方法的情况下以良好的方式读取数据?
在某些 JavaScript 上下文中使用 jQuery 示例:
var data = $('#form_name').data();//所有数据值都会自动转换为 JSON警报(数据.foo);//显示:条形警报(data.baz.name);//显示:约翰
I'm looking for a way to manage all the form data within MyFormType.php
. So far I've the label
and placeholder
, but I'd like to store an additional string, e.g. for "more details".
AppBundle\Form\Type\MyFormType.php
// ...
$builder->add('fieldname', TextType::class, [
'label' => 'My label',
'attr' => ['placeholder' => 'My placeholder'],
'additionalData' => ['info' => 'More information] // <- ???
]);
// ...
myForm.html.twig
Label: {{form_label(form.fieldname)}}
Textfield: {{form_widget(form.fieldname)}}
Info: {{form_additionalData(form.fieldname, 'info')}} {# ??? #}
I was thinking about passing the data via an data-*
-attribute like:
// ...
'attr' => ['data-info' => 'more information']
// ...
But how to read the data in a good way, without buggy workarounds?
Any best/good practise for this issue?
Thanks in advance!
By using a form type extension for that probably is a way if it's a common use case in your application:
# src/AppBundle/Form/Extension/FormTypeExtension.php
class FormTypeExtension extends AbstractTypeExtension
{
public function buildView(FormView $view, FormInterface $form, array $options)
{
foreach ($options['extra_data'] as $name => $data) {
$dataName = sprintf('data-%s', $name);
$view->vars['attr'][$dataName] = json_encode($data);
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array('extra_data' => array()));
$resolver->setAllowedTypes('extra_data', 'array');
}
public function getExtendedType()
{
return FormType::class;
}
}
Register your form type extension:
# app/config/services.yml
services:
app.form.extension.form_type:
class: AppBundle\Form\Extension\FormTypeExtension
tags:
- { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }
If:
$form->add('name', TextType::class, array(
'extra_data' => array(
'foo' => 'bar',
'baz' => array('name' => 'john'),
),
));
Then:
<input type="text" id="form_name" name="form[name]" data-foo=""bar"" data-baz="{"name": "john"}"/>
But how to read the data in a good way, without buggy workarounds?
In some JavaScript context by using jQuery example:
var data = $('#form_name').data();
// all data values are converted to JSON automatically
alert(data.foo); // display: bar
alert(data.baz.name); // display: john
这篇关于Symfony/Twig:如何将附加数据传递给表单?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!