Symfony веточка - PullRequest
       1

Symfony веточка

1 голос
/ 29 января 2020

Я сделал форму с FormBuilder Symfony. Когда я помещаю свою форму в веточку, form_start(form) и form_end(form), она добавляет тег для каждого ввода.

Я не понимаю, почему веточка добавляет тег. Каково решение удалить этот тег

Спасибо за ваш ответ :) Кроме того, мой formbuilder такой:

->add('title', TextType::class, array(
      'label'=>false,
      'attr'=>array('autofocus'=>true)
      ))

моя веточка такая:

{{ form_start(form) }}
<div class="row">
    <div class="col-sm-9 p-1">
        {{ form_row(form_record.title, {'attr':{'class':"form-control", 'placeholder':"Description"|trans, 'title':"Description"|trans }}) }}
        {{ form_errors(form_record.title) }}
    </div>
    <div class="col-sm-1 pt-2">
        <button type="submit" class="btn btn-success btn-circle btn-sm">
            <i class="fas fa-plus"></i>
        </button>
    </div>
</div>
{{ form_end(form) }}

и результат в исходном коде html:

<div class="row">
    <div class="col-sm-9 p-1">
        <div>
            <input type="text" id="app__title" name="app_[title]" required="required" class="form-control" placeholder="Description" title="Description">
        </div>
    </div>
</div>

Итак, Твиг добавляет

<div> 

, который мне не нужен. Как я могу удалить этот автозаполненный тег? Я попробовал

{% do form_record.title.set rendered %}

, но, возможно, я думаю, что он не работает.

1 Ответ

0 голосов
/ 29 января 2020

Редактировать: Хорошо, кажется, я сначала неправильно понял проблему. Я думал, что вы хотели скрыть поле, которое было в вашей форме, что можно сделать с помощью

{% do form.myField.setRendered %}

Теперь, когда я понимаю проблему, я считаю, что это происходит из-за того, как печатается ваше поле.

В поле формы есть 3 основных компонента.

Label: form_label(form.field)
Widget: form_widget(form.field)
Errors: form_errors(form.field)

Существует возможность печати всех трех компонентов одновременно. Функция является

form_row(form.field)

Вот виновник: form_row (). Поскольку он обычно печатает 3 разных компонента, он добавляет к нему div!

Далее, посмотрев на тип формы и увидев 'label' => false, я могу сказать, что этикетка сначала печаталась с использованием form_row.

Чтобы избежать необходимости определять 'label'=>false каждый раз, вы можете просто напечатать поле формы следующим образом:

{{ form_widget(form_record.title, {'attr':{'class':"form-control", 'placeholder':"Description"|trans, 'title':"Description"|trans }}) }}
{{ form_errors(form_record.title) }}

Вы можете просто пропустить {{form_label(form_record.title)}}, и он не будет печататься.

С другой стороны, я также заметил кое-что, что может быть в порядке, но в данном примере это не так.

В ветке, которой вы поделились, форма начинается с {{ form_start(form) }}, но тогда поле равно {{ form_row(form_record.title)}}.

Откуда я родом form_record здесь не определено. Я бы использовал {{ form_row(form.title)}}

В любом случае, объяснение разницы между form_row и form_widget можно найти здесь: Symfony различия форм между строкой и виджетом

Наслаждайтесь !

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