Symfony2的表单不会提交。 表单名称不请求(Symfony2 Form won't

2019-10-19 14:32发布

发现的解决方案:我没有具体说明我的窗体的建设者的方法。 加上使用setMethod( “POST”)固定我的问题。

我一直在使用的Symfony2最近开始(与学习TDD。我想我不喜欢很容易),并一直与从今天早上我的表格的麻烦。 它用于工作,但现在我似乎无法得到一个工作响应。

我设法查明错误了一下。 Symfony的到达在HttpFoundationRequestHandler类的点,它检查是否应处理该请求或不(在第56行开始)和第59行是其中它打破

} elseif ($request->request->has($name) || $request->files->has($name)) {

所以,如果我得到这个权利,因为它不能在请求查找窗体的名字,它简单地忽略它,相信从未提交表单。 我不明白的是如何这是可能的,因为这可能会导致换页/刷新的唯一事情是用户按表格的“提交”按钮...

如果你们有什么建议或简单的指针我的问题可能是,我会非常感谢!

因为我觉得在一个相当盲目的,我会后我下面的TrinomeClientVideoUploadForm类以及显示和处理表单的请求我的控制器内的功能。

这这里,如果课堂上,我用它来构建形式:

<?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(),
    );
}

树枝文件,其中我呈现形式:

{% 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 %}

Answer 1:

你不应该需要使用结构,特别是因为你没有传递$name从你的控制器变量作为自变量。 然后,您可以删除私有财产为好。 我不认为这是你的问题,而这只是不必要的。

在当你调用方法的CreateForm你的控制器,你是不是传递一个动作或形式的方法。 我猜你的树枝被渲染上开放的形式标记没有action属性的表单。

关于你的表单类型,假设你正试图将对象(或实体)配合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';
    } 
}

希望这可以帮助你。



Answer 2:

尝试改变这一功能

public function getName()
{
    return "oww_yiss_it_works";
}

这是一个疯狂的猜测(我相信,你期望它的工作构造不工作),我不是用symfony好,尽量回到你改变什么,你会得到哪里出了问题



文章来源: Symfony2 Form won't submit. Form name not in Request