Symfony / Twig:如何将其他数据传递到表单? - php

我正在寻找一种管理MyFormType.php中所有表单数据的方法。到目前为止,我有labelplaceholder,但是我想存储一个额外的字符串,例如更多细节”。

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')}}  {# ??? #}

我正在考虑通过data-*属性传递数据,例如:

// ...
'attr' => ['data-info' => 'more information']
// ...

但是,如何在没有错误的解决方法的情况下以良好的方式读取数据?

有什么最佳/良好做法可以解决此问题?

提前致谢!

参考方案

如果在应用程序中是常见的用例,则使用form type extension可能是一种方法:

# 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;
    }
}

注册您的表单类型扩展名:

# 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 }

如果:

$form->add('name', TextType::class, array(
    'extra_data' => array(
        'foo' => 'bar', 
        'baz' => array('name' => 'john'),
    ),
));

然后:

<input type="text" id="form_name" name="form[name]" data-foo=""bar"" data-baz="{"name": "john"}"/>

但是,如何在没有错误的解决方法的情况下以良好的方式读取数据?

在某些JavaScript上下文中,使用jQuery示例:

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 2在用户站点上动态添加字段以形成表单 - php

我正在研究调查包。目的是为用户提供一个功能全面的调查系统。我已经准备好一个后端,使您可以创建调查,添加问题(打开文本,单选按钮,复选框),是否需要提问,激活调查,生成令牌以及通过电子邮件将令牌发送到调查的链接。当然,我也有显示调查并保存答案的前端。现在,我想添加另一种可能性。带有答案(单选或复选框)和评论的问题。例如:你有一只狗吗?是没有如果用户选择是,则附…

symfony 2路由模型 - php

Sf2.0,例如标准博客。routing.yml代码:DevBlogBundle_post_show: pattern: /posts/{id} defaults: { _controller: "DevBlogBundle:Post:show" } requirements: _method: GET id: \d+ 我使用以下方法为我…

Symfony 4中没有服务FOSJsRoutingBundle - php

错误:An exception has been thrown during the rendering of a template "You have requested a non-existent service "C". Did you mean one of these: "Symfony\Bundle\Fr…

Symfony 2:如何通过路由名称获取默认路由? - php

是否可以通过名称检索有关某条路线的信息,或获取所有路线的列表?我需要能够获取任意路径的_controller中的defaults值,而不仅仅是当前路径。这有可能吗?P.S .:我发现我可以找到使用YAML的路由,但是重新解析似乎是不必要且繁重的。 参考方案 我真的很擅长回答自己的问题。要获取路由,请在路由器上(控制器内的getRouteCollection(…

如何通过FormBuilder的字段传递细枝参数 - php

我已经以documentation中的形式实现了帮助消息。{% extends 'form_div_layout.html.twig' %} {% block field_widget %} {{ parent() }} {% if help is defined %} <span class="help">…