Показать форму Symfony - PullRequest
0 голосов
/ 02 мая 2018

У меня проблема с формой.

Для начала, в основную веточку я включил веточку, которую я использую для формы:

 {% include 'MainBundle::manage.html.twig'%}

Контроллер mainController

Контроллер отображает все, что появляется в главной ветке.

Действие формы:

public function manageAction(Request $request){

        $manageForm = $this->createFormBuilder()
        ->add('submitFile', FileType::class, array('label' => 'File to Submit'))
        ->add('send', SubmitType::class)->getForm();

        if ($request->getMethod('post') == 'POST') {
            // Bind request to the form
            $manageForm->bindRequest($request);

            // If form is valid
            if ($manageForm->isValid()) {
                // Get file
                $file = $manageForm->get('submitFile');

                $file->getData();
            }

        }
        return $this->render('MainBundle::main.html.twig', array(
            'manageForm' => $manageForm->createView()
        ));
    }

routing.yml

manage:
    path: /manage
    defaults:
      _controller: MainBundle:Main:manage
    requirements:
      _method: POST

manage.html.twig

{% extends 'MainBundle::main.html.twig' %}
{% block content %}

<form action="" method="post">
        {{ form_widget(manageForm) }}
        <input type="submit" />
    </form>
{% endblock %}

когда я бегу по маршруту / основному, у меня должен быть дисплей формы, но у меня появляется ошибка

Переменная "manageForm" не существует.

Я думаю, контроллер не принимает вид ...

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

В вашем конкретном случае - смените на следующее.

return $this->render('MainBundle::manage.html.twig', array(
        'manageForm' => $manageForm->createView()
    ));

Если вы расширяете основную / основную ветку в другой ветке, то вам нужно визуализировать эту другую ветку (всегда).

Параметры, которые вы передаете в расширенную веточку, будут доступны в ветке, которую вы расширили (в данном случае main.html.twig), но она не работает наоборот.

{% include 'MainBundle::manage.html.twig'%} // why ?

Ничего не делать с main - просто расширить его в управлении !!!!

Я вижу и другие проблемы с вашим общим кодом.

CONTROLLER: // более современный способ вместо проверки вручную для метода запроса

 if ($form->isSubmitted()) {
    if ($form->isValid()) {
      // perform actions...
    } else {
       // was not valid...return error messages 
     }
}

ФОРМА

<form action="" method="post"> // this is the oldschool way
    {{ form_widget(manageForm) }}
    <input type="submit" />
</form>

Лучше что-то вроде ... (некоторые из моих недавних закодированных примеров)

  {{ form_start(form, {'attr' : {'method' : 'post', 'enctype' : 'multipart/form-data', 'class' : 'test'}}) }}
         {{ form_errors(form.resume) }}
         {{ form_widget(form.resume, {'attr' : {'id' : 'file-upload-rec', 'class' : 'file-upload-rec js-file-upload-rec', 'accept' : '.pdf, .doc, .docx'}}) }}
         {{ form_label(form.resume, 'select', {'label_attr' : {'class' : 'file-upload js-file-upload'}}) }}
         {{ form_row(form._token) }}
  {{ form_end(form, {'render_rest': false}) }}

пс. Вы также можете прочитать все https://symfony.com/doc/current/forms.html

0 голосов
/ 02 мая 2018

Вам нужно передать переменную при включении вашего шаблона

{% include 'MainBundle::manage.html.twig' with {'manageForm': manageForm} %}

Для получения дополнительной информации см. https://twig.symfony.com/doc/2.x/tags/include.html

Спасибо!

0 голосов
/ 02 мая 2018

Вы визуализируете main.html.twig вместо manage.html.twig. Я предполагаю, что первый использует переменную importForm, которая поэтому не передается в представление.

Если нет, и вам действительно нужно отрендерить main.html.twig, который включает manage.html.twig, то почему manage.html.twig расширяет main.html.twig? Либо включайте одно в другое, либо расширяйте одно из другого, а не оба.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...