Установить описание в Zend Form

Я использую Zend Framework в своем проекте. Я хочу добавить описание / примечание к моим формам, как

fields marked by * are mandatory

Но я не нашел, как добавить описание в форму и как использовать его с декораторами.

Любая помощь будет высоко оценена. Благодарю.

3 ответа

Решение

Есть два варианта:

  • Используйте от декоратора или
  • простираться Zend_Form_Element создать собственный элемент

Я бы остановился на последнем, так как очень часто добавляют части исходного HTML-кода в формы не только перед элементами или после, но и между ними.

Вы должны сделать что-то вроде этого:

class My_Form_Element_Raw extends Zend_Form_Element
{
    protected $raw_html;
    public function setRawHtml($value)
    {
        $this->raw_html = $value;
        return $this;
    }
    public function getRawHtml()
    {
        return $this->raw_html;
    }
    public function render()
    {
        // you can use decorators here yourself if you want, or wrap html in container tags
        return $this->raw_html;
    }
}

$form = new Zend_Form();
// add elements
$form->addElement(
    new My_Form_Element_Raw(
        'my_raw_element', 
        array('raw_html' => '<p class="highlight">fields marked by * are mandatory</p>')
    )
);
echo $form->render();

При расширении Zend_Form_Element вам не нужно переусердствовать setOption/s, getOption/s методы. Zend внутренне использует set* и get* и защищенные свойства для обнаружения опций элемента, как в этом случае protected $raw_html; а также public function setRawHtml($value) а также public function getRawHtml()Также называя вашу собственность $raw_html примет обе опции 'raw_html' и 'rawHtml' соответственно

Самый простой способ добавить дополнительный текст в ваши формы - просто добавить соответствующий HTML-код в представление страницы:

<div>
    <h4>fields marked by * are mandatory</h>
    <?php echo $this->form ?>
</div>

или используйте декоратор viewScript для управления всей формой работы:

<article class="login">
    <form action="<?php echo $this->element->getAction() ?>"
          method="<?php echo $this->element->getMethod() ?>">
        <table>
            <tr>
                <th>Login</th>
            </tr>
            <tr>fields marked by * are mandatory</tr>
            <tr>
                <td><?php echo $this->element->name->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->password->renderViewHelper() ?></td>
            </tr>
            <tr>
                <td><?php echo $this->element->submit ?></td>
            </tr>
        </table>
    </form>
</article>

Однако вы можете добавить описание к вашей форме, используя $form->setDescription() тогда вы можете сделать это описание с помощью echo $this->form->getDescription(), Вероятно, было бы лучше использовать эти методы на уровне элементов вместе с set и getTag() вместо уровня формы.

Чтобы указать звездочку, я просто использую css:

dt label.required:before {
    content: "* ";
    color: #ff0000;
}

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

 class FormDecorators {
    public static $simpleElementDecorators = array(
        array('ViewHelper'),
        array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')),
        array('Description', array('tag' => 'div', 'class' => 'desc-item')),
        array('Errors', array('class' => 'errors')),
        array('HtmlTag', array('tag' => 'div', 'class' => 'form-item'))
    );
    }

Это декораторы для элементов, которые я обычно использую, они содержат префикс с * и описание декоратора.

затем используйте код:

$element->setDescription('fields marked by * are mandatory');

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

Другие вопросы по тегам