Как добавить класс и идентификатор к элементу формы в Zend Framework 2.2.4


HTML, который мне нужен:

<label for="text_field_username">User Name</lable>
<input type="text" id="text_field_username" name="text_field_username" class="form-control" />

Я хочу, чтобы значение for метки связывалось с идентификатором входного сигнала. Таким образом, пользователь может щелкнуть по метке, чтобы выделить ввод. Более полезно для чекбокса. Также, что менее важно, я хочу, чтобы в поле ввода был класс.

То, что я пробовал и не работает для меня:

echo $this->formRow($form->get('usr_name'));

Я также попытался использовать частичную компоновку.

echo $this->formElement($element);

Прежде чем опубликовать этот вопрос, я наткнулся на это документация framework.zend.com/manual/2.2/en/modules/zend.form.view.helpers.html#formlabel

Это не работает. Он добавляет "За", но ни на что не указывает. !?

2 9

2 ответа:

Просмотр партиалов помогает с визуализацией формы, однако они не имеют дело со свойствами самих элементов формы. Этим занимается класс форма и коллекцию элементов формы (т. е. объект textelement)

Вы можете использовать setAttribute('class', 'class name') на любом элементе формы

Итак, в рамках метода init() вашей формы это должно работать:

$element = $this->getElement('text_field_username');
$element->setAttribute('class', 'class name');

Вы также можете установить это в свой унаследованный класс помощника формы следующим образом:

namespace Application\Form;
use Zend\Form\Form;
class NexForm extends Form
{
public function __construct($name = null)
{
    parent::__construct('Nex');
    $this->setAttribute('method', 'post');
    $this->setAttribute(
        'enctype',
        'multipart/form- data'
    );
    $this->add(array(
        'name' => 'default_widget',

        'attributes' => array(
            'type' => 'text',
            'id'   => 'default_widget',
            'class' => 'mtz-monthpicker-widgetcontainer',
            'required' => 'required',
        ),
        'options' => array(
            'label' => 'Please choose the month of records you want to display:',
        ),
    ));
}
}

И в вашем представлении просто позвоните:

     $nex=$this->app;   //app is the form object we passed from controller to view
     echo $this->formElement($nex->get('default_widget'));