使用自定义表单(不是SF的内置Type)时,空的$ request-> files(FileBag)

Jb *_* R. 1 symfony symfony3.x

我在上传文件时遇到问题...我在Symfony表单(要约)中手动添加了一些输入,以允许用户创建新公司(如果他不想使用已经存在的公司),它可以工作非常适合text / textarea字段,但是我的文件Input不能正常工作。它的内容显示在请求参数中,而不是在我的请求的文件参数中,请参阅下面的我在dump($ request)时得到的内容:

 OfferController.php on line 173:
Request {#86 ?
  +attributes: ParameterBag {#70 ?}
  +request: ParameterBag {#69 ?
    #parameters: array:2 [?
      "offer" => array:15 [?]
      "company" => array:6 [?
        "name" => "entreprise"
        "pic_logo" => "ah.png" //THIS SHOULD NOT BE HERE BUT IN THE FILEBAG
        "sector" => "2"
        "status" => "fdsfds"
        "revenues" => "sdfsdf"
        "content" => "<p>sdfdsf</p>\r\n"
      ]
    ]
  }
  +query: ParameterBag {#49 ?}
  +server: ServerBag {#73 ?}
  +files: FileBag {#63 ?
    #parameters: [] //NO FILE HERE :'(
  }
Run Code Online (Sandbox Code Playgroud)

这是产生此代码的代码:View:

{{ form_start(form) }}

    <h2>Employeur</h2>
    {{ form_row(form.company) }}

    <a class="company-new" href="#" id="toggleCompanyForm">Ajouter une nouvelle entreprise...</a>

    <div id="form_company" style="display:none">
        <div class="row">
            <div class="large-6 small-12">
                <label>Nom de l'entreprise</label>
                <input type="text" name="company[name]">
            </div>
            <div class="large-6 small-12">
                <label>Logo de l'entreprise</label>
                {% for message in app.session.flashBag.get('warning_logo') %}
                    <div class="alert alert-warning">
                        {{ message }}
                    </div>
                {% endfor %}
                <input type="file" name="company[pic_logo]"> {# MY FILE INPUT #}
            </div>
Run Code Online (Sandbox Code Playgroud)

和控制器:

public function createAction(Request $request)
{
    $confirmed = false;
    $entity = new Offer();

    $em = $this->getDoctrine()->getManager();
    $sectors = $em->getRepository('ModelBundle:Sector')->findAll();

    $form = $this->createForm('ModelBundle\Form\OfferType', $entity);
    $session    = $request->getSession();
Run Code Online (Sandbox Code Playgroud)

die(dump($ request));

Vad*_*man 6

要通过HTML表单上传文件,您必须添加enctype="multipart/form-data"到标记中:

<form action="..." method="post" enctype="multipart/form-data">
Run Code Online (Sandbox Code Playgroud)

或更改树枝中的打开表单标签:

{{ form_start(form, {'multipart': true}) }}
Run Code Online (Sandbox Code Playgroud)