Установить описание в 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');
Добавьте описание к одному элементу, после этого Вы можете стилизовать описание, чтобы оно появилось где-то в нижней части, надеюсь, это поможет, хорошего дня.