Пустые файлы $request-›(FileBag) при использовании пользовательской формы (не встроенной Type из SF)

У меня проблемы с загрузкой файлов... Я вручную добавляю несколько входных данных в форму Symfony (предложение), чтобы пользователь мог создать новую компанию, если он не хочет использовать уже существующую, она работает очень хорошо для полей text/textarea, но мой ввод файла не работает должным образом. Его содержимое отображается в параметрах запроса, а не в параметрах файлов моего запроса, см. ниже, что я получаю, когда выгружаю ($ 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 :'(
  }

Вот код, который производит это: 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>

И контроллер:

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();

умереть (дамп ($ запрос));


person Jb R.    schedule 26.10.2017    source источник
comment
Забавно, но если я добавлю тип файла в свой OfferType, даже если я его не заполню, я получу оба файла в свой FileBag:/   -  person Jb R.    schedule 26.10.2017


Ответы (1)


Чтобы загрузить файл через HTML-форму, необходимо добавить enctype="multipart/form-data" к тегу:

<form action="..." method="post" enctype="multipart/form-data">

Или измените тег открывающей формы в ветке:

{{ form_start(form, {'multipart': true}) }}
person Vadim Ashikhman    schedule 26.10.2017
comment
$form = $this-›createForm('ModelBundle\Form\OfferType', $entity, ['attr' =› array('enctype' =› 'multipart/form-data')]); СПАСИБО ! (multipart =› true недопустимый вариант) - person Jb R.; 26.10.2017
comment
Действительно, этот параметр предполагается использовать в twig. я обновил свой ответ - person Vadim Ashikhman; 26.10.2017
comment
Вы также можете попробовать это: {{ form_start(form, { 'attr': {'enctype': 'multipart/form-data'} }) }} - person Carol-Theodor Pelu; 01.10.2018