Symfony Twig中的FormView在呈现表单时会丢失提交的数据

Symfony Twig中的FormView在呈现表单时会丢失提交的数据,symfony,twig,Symfony,Twig,我使用symfony 2.7.6全堆栈框架 当我提交表单时,在控制器中我得到了所有提交的数据,但在视图中什么都没有,呈现了一个空表单,出现了一些错误,我应该显示提交的表单,但有错误。但细枝表格中没有显示任何数据和错误 经过数小时的symfony调试,我无法解决这个问题 以下是贴花为服务的表单类型: <?php namespace Skonsoft\ModelBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Sy

我使用symfony 2.7.6全堆栈框架

当我提交表单时,在控制器中我得到了所有提交的数据,但在视图中什么都没有,呈现了一个空表单,出现了一些错误,我应该显示提交的表单,但有错误。但细枝表格中没有显示任何数据和错误

经过数小时的symfony调试,我无法解决这个问题

以下是贴花为服务的表单类型:

<?php

namespace Skonsoft\ModelBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Doctrine\Common\Persistence\ObjectManager;
use Skonsoft\UserBundle\Entity\User;

class ConversationType extends AbstractType
{
    /**
     * @var \Doctrine\Common\Persistence\ObjectManager
     */
    private $om;

    /**
     * @var TokenStorageInterface
     */
    protected $tokenStorage;

    /**
     * Constructor
     * 
     * @param ObjectManager $om
     * @param TokenStorageInterface $tokenStorage
     */
    public function __construct(ObjectManager $om,
                                TokenStorageInterface $tokenStorage)
    {
        $this->om = $om;
        $this->tokenStorage = $tokenStorage;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
                ->add('message')
                ->add('advert', 'entity_hidden',
                      array(
                    'class' => 'SkonsoftModelBundle:Advert',
                    'data_class' => null,
                    'data' => $options['data']->getAdvert()
                ))
        ;

        $addUser = function(FormBuilderInterface $builder, User $user, $call) {
            $builder->addEventListener(FormEvents::PRE_SET_DATA,
                                       function(FormEvent $event) use ($user, $call) {
                $entity = $event->getData();
                $entity->$call($user);
            });
        };

        $from = $options['data']->getFrom();
        if (!$from) {
            $from = $this->om->getRepository('SkonsoftUserBundle:User')->find($this->tokenStorage->getToken()->getUser()->getId());
        }

        $to = $options['data']->getTo();
        if (!$to) {

            $advert = $this->om->getRepository('SkonsoftModelBundle:Advert')->find($options['data']->getAdvert());
            $to = $advert->getUser();
        }

        $addUser($builder, $from, 'setFrom');
        $addUser($builder, $to, 'setTo');
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Skonsoft\ModelBundle\Entity\Conversation'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'ss_conversation';
    }

}
这是树枝:

{{form_start(form, {'action': path('conversation_create', {'id': entity.advert.id}), 'method': 'POST', 'class':'form-horizontal', 'role':'form' } )}}

<div class="form-group row">
    <div class="col-sm-12 col-xs-12">
        {{ form_widget(form.message, {'attr': {'class': 'form-control pull-right', 'placeholder':"message.text_holder" | trans, 'rows':'6' } }) }}
    </div>

    <div class="widget_error  col-sm-12 col-xs-12">
        {{ form_errors(form.message) }}
    </div>
</div>

<div class="form-group row">
    <button type="submit" class="btn btn-success btn-lg {{'css.pull.right'|trans}}">{{ "Send" | trans }} </button>
</div>

{{form_end(form)}}
{form_start(form,{'action':path('conversation_create',{'id':entity.advert.id}),'method':'POST','class':'form-horizontal','role':'form'}}
{{form_小部件(form.message,{'attr':{'class':'form control pull right','placeholder':“message.text_holder”| trans,'rows':'6'}}}}
{{form_errors(form.message)}}
{{“发送”| trans}
{{form_end(form)}}
当我在控制器中转储FormView时,我会得到提交的数据及其错误。。。但不是在wiew

有人知道怎么了吗


谢谢

对不起,这是我的错误,与symfony无关

因此,问题是:
使用此配置,一切正常,只是我使用了render_esi帮助器来渲染表单,我忘记了render_esi是一个新的请求,所以当我提交表单时,第一个主请求获取并处理表单,但是调用render_esi后,我会丢失所有表单的数据。

在您看来,您是否尝试过仅使用
{{form(form)}}
而不是使用标记来渲染整个表单?我以前遇到过错误冒泡和显示的问题,这可以解释您的问题。如果在执行
{{form(form)}}
时显示错误,则可能就是错误。这不是错误,只是我使用render_esi帮助程序犯的错误,因此我丢失了所有提交的数据。看看我上面的答案。
{{form_start(form, {'action': path('conversation_create', {'id': entity.advert.id}), 'method': 'POST', 'class':'form-horizontal', 'role':'form' } )}}

<div class="form-group row">
    <div class="col-sm-12 col-xs-12">
        {{ form_widget(form.message, {'attr': {'class': 'form-control pull-right', 'placeholder':"message.text_holder" | trans, 'rows':'6' } }) }}
    </div>

    <div class="widget_error  col-sm-12 col-xs-12">
        {{ form_errors(form.message) }}
    </div>
</div>

<div class="form-group row">
    <button type="submit" class="btn btn-success btn-lg {{'css.pull.right'|trans}}">{{ "Send" | trans }} </button>
</div>

{{form_end(form)}}