@Cels

Как последовательно получить поля формы в symfony?

Нужно в контейнере сервиса, получить массив полей формы, в виде html кода.
Получаю все поля:
/**
     * @var FormBuilderInterface
     */
    private $builder;
    /**
     * @var \Twig_Environment
     */
    private $twig;

// тут добавляем поля, как обычно...
$this->builder->add($name, $class, $setting);
...

// теперь их нужно получить и вывести:
$form = $this->builder->getForm();
$result = $this->twig->render('form/fields.html.twig', array('form' => $form->createView()));

Все супер, все работает:
посмотреть вывод $result:
<div id="_q7" class="form-group">
    <label class="control-label required"> Вопрос №1</label>
    <div id="q7">
        <div class="radio">
            <label for="q7_0" class="required"><input type="radio" id="q7_0" name="q7" required="required" value="1" /> Да</label>
        </div>
        <div class="radio">
            <label for="q7_1" class="required"><input type="radio" id="q7_1" name="q7" required="required" value="-1" /> Нет</label>
        </div>
        <div class="radio">
            <label for="q7_2" class="required"><input type="radio" id="q7_2" name="q7" required="required" value="0" /> Неизвестно</label>
        </div>
    </div>
</div>
<div id="_q8" class="form-group">
    <label class="control-label required"> Вопрос №2</label>
    <div id="q8">
        <div class="radio">
            <label for="q8_0" class="required"><input type="radio" id="q8_0" name="q8" required="required" value="1" /> Да</label>
        </div>
        <div class="radio">
            <label for="q8_1" class="required"><input type="radio" id="q8_1" name="q8" required="required" value="-1" /> Нет</label>
        </div>
        <div class="radio">
            <label for="q8_2" class="required"><input type="radio" id="q8_2" name="q8" required="required" value="0" /> Неизвестно</label>
        </div>
    </div>
</div>


Теперь хочу получить те же поля формы, только последовательно, в цикле.
Пробую сделать так:
$form = $this->builder->getForm();
$items = $form->all();
foreach ($items as $item) {
    $result[] = $this->twig->render('form/fields.html.twig', array('form' => $item->createView()));
}

и получаю следующее:
<!-- $result[0] -->
<div class="form-group">
    <div class="radio">
        <label for="q7_0" class="required"><input type="radio" id="q7_0" name="q7" required="required" value="1" /> Да</label>
    </div>
</div>
<div class="form-group">
    <div class="radio">
        <label for="q7_1" class="required"><input type="radio" id="q7_1" name="q7" required="required" value="-1" /> Нет</label>
    </div>
</div>
<div class="form-group">
    <div class="radio">
        <label for="q7_2" class="required"><input type="radio" id="q7_2" name="q7" required="required" value="0" /> Неизвестно</label>
    </div>
</div>

<!-- $result[1] -->
<div class="form-group">
    <div class="radio">
        <label for="q8_0" class="required"><input type="radio" id="q8_0" name="q8" required="required" value="1" /> Да</label>
    </div>
</div>
<div class="form-group">
    <div class="radio">
        <label for="q8_1" class="required"><input type="radio" id="q8_1" name="q8" required="required" value="-1" /> Нет</label>
    </div>
</div>
<div class="form-group">
    <div class="radio">
        <label for="q8_2" class="required"><input type="radio" id="q8_2" name="q8" required="required" value="0" /> Неизвестно</label>
    </div>
</div>


А нужно, как в первом разе, только каждое поле - отдельным элементом массива.
Как это сделать?

Шаблон twig form/fields.html.twig:
{{ form_rest(form) }}
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Вам надо использовать {{ form_row(form) }} вместо {{ form_rest(form) }}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы