2016-02-23 3 views
0

Использование ZF2 Я пытаюсь разместить <br> или аналогичный элемент между моими элементами формы. У ZF1 было что-то вроде «Decorators», которые, как мне известно, уже не в ZF2. Однако у ZF2 нет элемента $form->addBr(), и это то, что мне нужно.Как добавить «новую строку» после элемента формы ZF2?

Вот как я сделать форму на мой взгляд:

<?php echo $this->form($this->form);?> 

Вот как я готовлю $form в мой контроллер

// Set up checkbox 
    $checkbox = new Element\Checkbox('checkbox'); 
    $checkbox->setChecked(true); 

    //Set up text 
    $text = new Element\Text('text'); 
    $text->setLabel("Hi"); 
    $text->setValue(333); 

    // Assemble Fielset 
    $fieldset = new Fieldset("FS"); 
    $fieldset->setLabel("Label"); 

    $fieldset->add($checkbox); 

    //NOTE: I need a "NEW LINE" Here 
    $fieldset->ADD_NEW_LINE();// no such method 


    $fieldset->add($text); 

    // Assemble Form 
    $form = new Form(); 
    $form->add($fieldset); 

Текущий выпуск:

Элементы формы выведите на одной строке, когда я хочу, чтобы они были на новой строке.

Вопрос

Когда я хочу ZF2 просто вынести всю форму на одном дыхании, как я пытаюсь сделать здесь (желательно без кода ввиду, что визуализирует форму построчно), как может Я делаю это так, чтобы я мог размещать новые элементы формы на новых строках?

Я открыт для любых решений - будь то программные решения ZF2 или решения для CSS (если возможно) или другие решения, о которых я пока не могу думать. Я просто хочу, чтобы форма отображалась с элементами, отображаемыми на новых строках, а не появляющимися в одной строке.

ZF2 Оказывает HTML следующим образом:

<fieldset> 
 
    <legend>Legend</legend> 
 
    <label><span>Check</span> 
 
    <input name="name[checkbox]" value="0" type="hidden"> 
 
    <input name="name[checkbox]" value="1" checked="checked" type="checkbox"> 
 
    </label> 
 

 
    <label><span>Value</span> 
 
    <input name="name[text]" value="123" type="text"> 
 
    </label> 
 
</fieldset>

+0

Вздох ... думать об этом, может быть, я просто должен сделать «по строкам» подход в представлении, вроде как здесь http://framework.zend.com/manual/current/en/modules/ zend.form.view.helper.form-row.html – Dennis

ответ

0

Я был в состоянии сделать это произошло - в основном скопирована ZF2's own mechanisms и получил некоторую помощь от этого ответа: https://stackoverflow.com/a/15827116/2883328

я удалил FieldSet, который был только баловаться меня, а затем используется цикл для перебора элементов формы, вносящий изменения <br/>, где я хотел его - после каждого элемента. Так много для этого.

<?php 
/** 
* inside view template 
* 
* @var $this \Zend\View\Renderer\PhpRenderer 
* @var $form \Zend\Form\Form 
*/ 
$form = $this->form; 
?> 
<fieldset> 
    <legend>Legend</legend> 
    <?php 
    echo $this->form()->openTag($form); 
    foreach ($form as $element) 
     $formContent .= $this->formrow($element) . "<br/>"; //note the "BR" 

    echo $formContent; 
    echo $this->form()->closeTag(); 

    ?> 
</fieldset> 
2

Вы можете сделать это с помощью CSS или переопределить formRow() помощника (который form() помощник использует) для вывода разметки вы хотите ,

Я создал простой модуль, который переопределяет вспомогательный элемент формы формы для выходных div (с соответствующими классами для стилизации): https://packagist.org/packages/tfountain/tf-form - не стесняйтесь использовать это или скопировать подход и настроить в соответствии с вашими потребностями. Mine даст вам разметить так:

<div id="some_element" class="form-row form-row-text"> 
    <label><span>Value</span> 
     <input name="name[text]" value="123" type="text"> 
    </label> 
</div> 

Если вы хотите, чтобы свернуть свое собственное подобное решение, это вспомогательный код: https://github.com/tfountain/tf-form/blob/master/src/TfForm/Form/View/Helper/FormRow.php

Смежные вопросы