找到解决方案:我没有在我的表单构建器中指定方法。添加setMethod(" POST")解决了我的问题。
我最近开始使用Symfony2(并且学习TDD。猜猜我不喜欢它)并且从今天早上起我的表单出现问题。它曾经工作过,但现在我似乎无法得到有效的回应。
我设法找出了一点错误。 Symfony在HttpFoundationRequestHandler类中得到一个点,它检查它是否应该处理请求(从第56行开始),第59行是它打破的地方
} elseif ($request->request->has($name) || $request->files->has($name)) {
因此,如果我做对了,因为它无法在请求中找到表单的名称,它只是忽略它,相信表单从未提交过。我不能得到的是如何做到这一点,因为唯一可以导致页面更改/刷新的是用户按下"提交"形式的按钮......
如果你们中有人对我的问题有什么建议或简单的指示,我会非常感激!
由于我对这一点感到非常盲目,我会在TrinomeClientVideoUploadForm类下面发布,并在我的Controller中显示并处理表单请求。
这就在这里,如果我用来构建表单的类:
<?php
namespace Trinome\WebVideoViewBundle\Model\Forms;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class TrinomeClientVideoUploadForm extends AbstractType
{
private $name;
public function __construct( $name = "trinome_client_video_upload" )
{
$this->name = $name;
}
/**
* {@inheritdoc}
*/
public function buildForm( FormBuilderInterface $builder, array $options )
{
$builder->add( "client", "text" )
->add( "video", "file" )
->add( "upload", "submit" );
}
/**
* {@inheritdoc}
*/
public function getName()
{
return $this->name;
}
}
这是在我的(唯一)控制器中处理页面的函数:
/**
* @Route("/")
* @Template()
*/
public function indexAction( Request $request )
{
$uploadVideoForm = new UploadVideoFormDataSet();
$form = $this->createForm( new TrinomeClientVideoUploadForm(), $uploadVideoForm );
$form->handleRequest( $request );
if ( $form->isValid() )
{
// It never gets here anyways, so I removed it for this post.
}
return array(
"form" => $form->createView(),
);
}
我呈现表单的Twig文件:
{% extends "@BaseViews/base.html.twig" %}
{% block title %}Outil d'upload vidéo Trinome{% endblock %}
{% block stylesheets %}
{% stylesheets '@TrinomeWebVideoViewBundle/Resources/public/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
{% endblock %}
{% block body %}
<div id="wrapper">
<header>
{% block header %}
{% image '@logo_trinome' %}
<img src="{{ asset_url }}" alt="Logo Trinome" />
{% endimage %}
{% endblock %}
</header>
<div id="content">
{% block content %}
<h1>Connection</h1>
{{ form( form ) }}
{% endblock %}
</div>
</div>
{% endblock %}
答案 0 :(得分:0)
尝试更改此功能
public function getName()
{
return "oww_yiss_it_works";
}
这是一个疯狂的猜测(我相信构造函数并不像你期望的那样工作)我对symfony不太好,试着回到你已经改变的东西,你会得到问题所在
答案 1 :(得分:0)
您不应该使用构造,尤其是因为您没有从控制器传递$name
变量作为参数。然后,您也可以删除私有财产。我不认为这是你的问题,而只是不必要。
在调用createForm方法时,在控制器中,您没有为表单传递操作或方法。我猜你的树枝正在渲染一个没有动作属性的表格。
关于您的表单类型,假设您尝试将对象(或实体)UploadVideoFormDataSet
绑定到表单,那么表单类型应该更像这样:
class TrinomeClientVideoUploadForm extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add( "client", "text" ) ->add( "video", "file" ) ->add( "upload", "submit" ) ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Namespace\YourBundle\Entity\UploadVideoFormDataSet' )); } /** * @return string */ public function getName() { return 'namespace_yourbundle_uploadvideoformdataset'; } }
希望这会对你有所帮助。