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